2.9. F
URTHER
R
EADING
Boolean operations
Numeric types
Sequence types
Set types
Mapping types
fractions
module
math
module
PEP
237: Unifying Long Integers and Integers
PEP
238: Changing the Division Operator
91
Pdf file password - C# PDF Password Library: add, remove, edit PDF file password in C#.net, ASP.NET, MVC, WinForms, WPF
Help to Improve the Security of Your PDF Document by Setting Password
break pdf password; add copy protection pdf
Pdf file password - VB.NET PDF Password Library: add, remove, edit PDF file password in vb.net, ASP.NET, MVC, WinForms, WPF
Help to Improve the Security of Your PDF Document by Setting Password
crystal report to pdf with password; add password to pdf file
C
HAPTER
3. C
OMPREHENSIONS
Our imagination is stretched to the utmost, not, as in fiction, to imagine things which are not really there, but just
to comprehend those things which are.
Richard Feynman
3.1. D
IVING
I
N
T
his chapter will teach you about list comprehensions, dictionary comprehensions, and set
comprehensions: three related concepts centered around one very powerful technique. But first, I want to
take a little detour into two modules that will help you navigate your local file system.
3.2. W
ORKING
W
ITH
F
ILES
A
ND
D
IRECTORIES
Python 3 comes with a module called
os
,which stands for “operating system.” The
os
module contains a
plethora of functions to get information on— and in some cases, to manipulate— local directories, files,
processes, and environment variables. Python does its best to offer a unified
API
across
all supported
operating systems so your programs can run on any computer with as little platform-specific code as
possible.
3.2.1. T
HE
C
URRENT
W
ORKING
D
IRECTORY
When you’re just getting started with Python, you’re going to spend a lot of time in
the Python Shell.
Throughout this book, you will see examples that go like this:
1. Import one of the modules in the
examples
folder
2. Call a function in that module
3. Explain the result
92
Online Remove password from protected PDF file
Online Remove Password from Protected PDF file. Download Free Trial. Remove password from protected PDF file. Find your password-protected PDF and upload it.
adding a password to a pdf; pdf print protection
C# PDF File Permission Library: add, remove, update PDF file
Barcode Read. Barcode Create. OCR. Twain. Password: Set File Permissions. |. Home ›› XDoc.PDF ›› C# PDF: Set File Permissions. You maybe interested:
create pdf password; pdf protected mode
There is
always a
current
working
directory.
If you don’t know about the current working directory,
step 1 will probably fail with an
ImportError
.Why?
Because Python will look for the example module in
the
import search path, but it won’t find it because the
examples
folder isn’t one of the directories in the search
path. To get past this, you can do one of two things:
1. Add the
examples
folder to the import search path
2. Change the current working directory to the
examples
folder
The current working directory is an invisible property
that Python holds in memory at all times. There is
always a current working directory, whether you’re in
the Python Shell, running your own Python script from
the command line, or running a Python
CGI
script on a
web server somewhere.
The
os
module contains two functions to deal with the current working directory.
>>> import os
>>> print(os.getcwd())
C:\Python31
>>> os.chdir('/Users/pilgrim/diveintopython3/examples')
>>> print(os.getcwd())
C:\Users\pilgrim\diveintopython3\examples
1. The
os
module comes with Python; you can import it anytime, anywhere.
2. Use the
os.getcwd()
function to get the current working directory. When you run the graphical Python
Shell, the current working directory starts as the directory where the Python Shell executable is. On
Windows, this depends on where you installed Python; the default directory is
c:\Python31
.If you run the
Python Shell from the command line, the current working directory starts as the directory you were in
when you ran
python3
.
3. Use the
os.chdir()
function to change the current working directory.
93
VB.NET PDF File Permission Library: add, remove, update PDF file
passwordSetting.IsCopy = True ' PDF document assembling is allowed. passwordSetting.IsAssemble = True ' Add password to the file.
change password on pdf document; password on pdf file
VB.NET PDF File Compress Library: Compress reduce PDF size in vb.
Also able to uncompress PDF file in VB.NET programs. Offer flexible and royalty-free developing library license for VB.NET programmers to compress PDF file.
create copy protected pdf; add password to pdf file with reader
4. When I called the
os.chdir()
function, I used a Linux-style pathname (forward slashes, no drive letter) even
though I’m on Windows. This is one of the places where Python tries to paper over the differences between
operating systems.
3.2.2. W
ORKING
W
ITH
F
ILENAMES AND
D
IRECTORY
N
AMES
While we’re on the subject of directories, I want to point out the
os.path
module.
os.path
contains
functions for manipulating filenames and directory names.
>>> import os
>>> print(os.path.join('/Users/pilgrim/diveintopython3/examples/', 'humansize.py'))
/Users/pilgrim/diveintopython3/examples/humansize.py
>>> print(os.path.join('/Users/pilgrim/diveintopython3/examples', 'humansize.py'))
/Users/pilgrim/diveintopython3/examples\humansize.py
>>> print(os.path.expanduser('~'))
c:\Users\pilgrim
>>> print(os.path.join(os.path.expanduser('~'), 'diveintopython3', 'examples', 'humansize.py'))
c:\Users\pilgrim\diveintopython3\examples\humansize.py
1. The
os.path.join()
function constructs a pathname out of one or more partial pathnames. In this case, it
simply concatenates strings.
2. In this slightly less trivial case,
join
will add an extra slash to the pathname before joining it to the filename.
It’s a backslash instead of a forward slash, because I constructed this example on Windows. If you replicate
this example on Linux or Mac OS X, you’ll see a forward slash instead. Python can access the file regardless
of what kind of slashes you use in the pathname.
3. The
os.path.expanduser()
function will expand a pathname that uses
~
to represent the current user’s
home directory. This works on any platform where users have a home directory, including Linux, Mac OS X,
and Windows. The returned path does not have a trailing slash, but the
os.path.join()
function doesn’t
mind.
4. Combining these techniques, you can easily construct pathnames for directories and files in the user’s home
directory. The
os.path.join()
function can take any number of arguments. I was overjoyed when I
discovered this, since
addSlashIfNecessary()
is one of the stupid little functions I always need to write when
building up my toolbox in a new language. Do not write this stupid little function in Python; smart people
have already taken care of it for you.
94
C# PDF File Merge Library: Merge, append PDF files in C#.net, ASP.
Professional C#.NET PDF SDK for merging PDF file merging in Visual Studio .NET. Append one PDF file to the end of another and save to a single PDF file.
add password to pdf document; pdf password unlock
C# PDF File Compress Library: Compress reduce PDF size in C#.net
Reduce image resources: Since images are usually or large size, images size reducing can help to reduce PDF file size effectively.
add password to pdf preview; convert password protected pdf to excel online
os.path
also contains functions to split full pathnames, directory names, and filenames into their constituent
parts.
>>> pathname = '/Users/pilgrim/diveintopython3/examples/humansize.py'
>>> os.path.split(pathname)
('/Users/pilgrim/diveintopython3/examples', 'humansize.py')
>>> (dirname, filename) = os.path.split(pathname)
>>> dirname
'/Users/pilgrim/diveintopython3/examples'
>>> filename
'humansize.py'
>>> (shortname, extension) = os.path.splitext(filename)
>>> shortname
'humansize'
>>> extension
'.py'
1. The
split
function splits a full pathname and returns a tuple containing the path and filename.
2. Remember when I said you could use
multi-variable assignment to return multiple values from a function?
The
os.path.split()
function does exactly that. You assign the return value of the
split
function into a
tuple of two variables. Each variable receives the value of the corresponding element of the returned tuple.
3. The first variable,
dirname
,receives the value of the first element of the tuple returned from the
os.path.split()
function, the file path.
4. The second variable,
filename
,receives the value of the second element of the tuple returned from the
os.path.split()
function, the filename.
5.
os.path
also contains the
os.path.splitext()
function, which splits a filename and returns a tuple containing
the filename and the file extension. You use the same technique to assign each of them to separate variables.
3.2.3. L
ISTING
D
IRECTORIES
The
glob
module is another tool in the Python standard library. It’s an easy way to get the contents of a
directory programmatically, and it uses the sort of wildcards that you may already be familiar with from
working on the command line.
95
C# PDF File Split Library: Split, seperate PDF into multiple files
Application. Best and professional adobe PDF file splitting SDK for Visual Studio .NET. outputOps); Divide PDF File into Two Using C#.
password pdf files; convert password protected pdf to word online
VB.NET PDF File Merge Library: Merge, append PDF files in vb.net
Professional VB.NET PDF file merging SDK support Visual Studio .NET. Merge PDF without size limitation. Append one PDF file to the end of another one in VB.NET.
pdf password reset; pdf password remover online
The glob
module uses
shell-like
wildcards.
96
>>> os.chdir('/Users/pilgrim/diveintopython3/')
>>> import glob
>>> glob.glob('examples/*.xml')
['examples\\feed-broken.xml',
'examples\\feed-ns0.xml',
'examples\\feed.xml']
>>> os.chdir('examples/')
>>> glob.glob('*test*.py')
['alphameticstest.py',
'pluraltest1.py',
'pluraltest2.py',
'pluraltest3.py',
'pluraltest4.py',
'pluraltest5.py',
'pluraltest6.py',
'romantest1.py',
'romantest10.py',
'romantest2.py',
'romantest3.py',
'romantest4.py',
'romantest5.py',
'romantest6.py',
'romantest7.py',
'romantest8.py',
'romantest9.py']
1. The
glob
module takes a wildcard and returns the path of all files and directories matching the wildcard. In
this example, the wildcard is a directory path plus “
*.xml
”, which will match all
.xml
files in the
examples
subdirectory.
2. Now change the current working directory to the
examples
subdirectory. The
os.chdir()
function can take
relative pathnames.
3. You can include multiple wildcards in your glob pattern. This example finds all the files in the current
working directory that end in a
.py
extension and contain the word
test
anywhere in their filename.
97
3.2.4. G
ETTING
F
ILE
M
ETADATA
Every modern file system stores metadata about each file: creation date, last-modified date, file size, and so
on. Python provides a single
API
to access this metadata. You don’t need to open the file; all you need is
the filename.
>>> import os
>>> print(os.getcwd())
c:\Users\pilgrim\diveintopython3\examples
>>> metadata = os.stat('feed.xml')
>>> metadata.st_mtime
1247520344.9537716
>>> import time
>>> time.localtime(metadata.st_mtime)
time.struct_time(tm_year=2009, tm_mon=7, tm_mday=13, tm_hour=17,
tm_min=25, tm_sec=44, tm_wday=0, tm_yday=194, tm_isdst=1)
1. The current working directory is the
examples
folder.
2.
feed.xml
is a file in the
examples
folder. Calling the
os.stat()
function returns an object that contains
several different types of metadata about the file.
3.
st_mtime
is the modification time, but it’s in a format that isn’t terribly useful. (Technically, it’s the number of
seconds since the Epoch, which is defined as the first second of January 1st, 1970. Seriously.)
4. The
time
module is part of the Python standard library. It contains functions to convert between different
time representations, format time values into strings, and fiddle with timezones.
5. The
time.localtime()
function converts a time value from seconds-since-the-Epoch (from the
st_mtime
property returned from the
os.stat()
function) into a more useful structure of year, month, day, hour,
minute, second, and so on. This file was last modified on July 13, 2009, at around 5:25 PM.
# continued from the previous example
>>> metadata.st_size
3070
>>> import humansize
>>> humansize.approximate_size(metadata.st_size)
'3.0 KiB'
98
You can use
any Python
expression
1. The
os.stat()
function also returns the size of a file, in the
st_size
property. The file
feed.xml
is
3070
bytes.
2. You can pass the
st_size
property to the
approximate_size()
function.
3.2.5. C
ONSTRUCTING
A
BSOLUTE
P
ATHNAMES
In
the previous section, the
glob.glob()
function returned a list of relative pathnames. The first example had
pathnames like
'examples\feed.xml'
,and the second example had even shorter relative pathnames like
'romantest1.py'
.As long as you stay in the same current working directory, these relative pathnames will
work for opening files or getting file metadata. But if you want to construct an absolute pathname— i.e. one
that includes all the directory names back to the root directory or drive letter— then you’ll need the
os.path.realpath()
function.
>>> import os
>>> print(os.getcwd())
c:\Users\pilgrim\diveintopython3\examples
>>> print(os.path.realpath('feed.xml'))
c:\Users\pilgrim\diveintopython3\examples\feed.xml
3.3. L
IST
C
OMPREHENSIONS
Alist comprehension provides a compact way of
mapping a list into another list by applying a function to
each of the elements of the list.
>>> a_list = [1, 9, 8, 4]
>>> [elem * 2 for elem in a_list]
[2, 18, 16, 8]
>>> a_list
[1, 9, 8, 4]
>>> a_list = [elem * 2 for elem in a_list]
>>> a_list
[2, 18, 16, 8]
99
in a list
comprehension.
1. To make sense of this, look at it from right to left.
a_list
is the list you’re mapping. The Python
interpreter loops through
a_list
one element at a time,
temporarily assigning the value of each element to the
variable
elem
.Python then applies the function
elem * 2
and appends that result to the returned list.
2. A list comprehension creates a new list; it does not
change the original list.
3. It is safe to assign the result of a list comprehension to
the variable that you’re mapping. Python constructs the
new list in memory, and when the list comprehension is
complete, it assigns the result to the original variable.
You can use any Python expression in a list comprehension, including the functions in the
os
module for
manipulating files and directories.
>>> import os, glob
>>> glob.glob('*.xml')
['feed-broken.xml', 'feed-ns0.xml', 'feed.xml']
>>> [os.path.realpath(f) for f in glob.glob('*.xml')]
['c:\\Users\\pilgrim\\diveintopython3\\examples\\feed-broken.xml',
'c:\\Users\\pilgrim\\diveintopython3\\examples\\feed-ns0.xml',
'c:\\Users\\pilgrim\\diveintopython3\\examples\\feed.xml']
1. This returns a list of all the
.xml
files in the current working directory.
2. This list comprehension takes that list of
.xml
files and transforms it into a list of full pathnames.
List comprehensions can also filter items, producing a result that can be smaller than the original list.
100
Documents you may be interested
Documents you may be interested