Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python - issues with numbers in pathnames

Tags:

python

I need to open all PDFs in a certain directory, so I first generate a list of the file paths using os.path:

filenames = [
    normpath(join(directoryname, filename))
    for filename in listdir(directoryname)
    if filename.lower().endswith('.'+extension)            
    ]

So an item in that list looks like this: D:\\Folder\\2010\\file.pdf

Then I'd like to open each file in a for-loop:

for file in filenames:
    PdfFileReader(file(file, 'rb'))

but there seems to be an issue with the 2010, because I get this error:

IOError: [Errno 2] No such file or directory: 'D:\\Folder\\x810\\file.pdf'

I'd like to do something along the lines of

PdfFileReader(file(r'D:\\Folder\\2010\\file.pdf', 'rb'))

how would I do that in the above example where the path is passed as a variable? Or are there any better ways to do this?

I'm using Windows and Python 2.6.

Thanks in advance!

like image 699
None Avatar asked Dec 07 '22 22:12

None


1 Answers

The backslash is special in C-style strings like Python uses, just like in C++, C#, and Java. Either use a double-backslash to say “yes, I really mean a backslash,” not the character code \201, or use an r'' string that does not interpret backslash sequences:

'D:\\Folder\\2010\\file.pdf'
r'D:\Folder\2010\file.pdf'

Note that this issue does NOT come up with variables! Once you create a string correctly, it always keeps its value; it does NOT get re-interpreted, and have backslashes cause problems all over again, each time you pass the value to a function, so open(myvar) should see exactly the same string you get when you print(myvar).

(I think that on Windows you may also be able to just use forward slashes, which require no special quoting:)

'D:/Folder/2010/file.pdf'
like image 142
Brandon Rhodes Avatar answered Dec 23 '22 20:12

Brandon Rhodes