Oz-in-DFW wrote: > I'm using Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:01:18) [MSC > v.1900 32 bit (Intel)] on Windows 7 > > I'm trying to write some file processing that looks at file size, > extensions, and several other things and I'm having trouble getting a > reliably usable path to files. > > The problem *seems* to be doubled backslashes in the path, but I've read > elsewhere that this is just an artifact of the way the interpreter > displays the strings. > > I'm getting an error message on an os.path.getsize call; > > Path: - > "C:\Users\Rich\Desktop\2B_Proc\2307e60da6451986dd8d23635b845386.jpg" - > Traceback (most recent call last): > File "C:\Users\Rich\workspace\PyTest\test.py", line 19, in <module> > if os.path.getsize(path)>10000: > File "C:\Python32\lib\genericpath.py", line 49, in getsize > return os.stat(filename).st_size > WindowsError: [Error 123] The filename, directory name, or volume > label syntax is incorrect: > '"C: \\Users\\Rich\\Desktop\\2B_Proc\\2307e60da6451986dd8d23635b845386.jpg"' > > From (snippet) > > path = '"'+dirpath+name+'"' > path = os.path.normpath(path) > print("Path: -",path,"-") > if os.path.getsize(path)>10000: > print("Path: ",path," Size: > ",os.path.getsize(dirpath+name)) > > but if I manually use a console window and cut and paste the path I > print, it works; > > C:\>dir > "C:\Users\Rich\Desktop\2B_Proc\2307e60da6451986dd8d23635b845386.jpg" > Volume in drive C is Windows7_OS > > Directory of C:\Users\Rich\Desktop\2B_Proc > > 10/03/2016 08:35 AM 59,200 > 2307e60da6451986dd8d23635b845386.jpg > 1 File(s) 59,200 bytes > 0 Dir(s) 115,857,260,544 bytes free > > So the file is there and the path is correct. I'm adding quotes to the > path to deal with directories and filenames that have spaces in them. > If I drop the quotes, everything works as I expect *until* I encounter > the first file/path with spaces.
You have to omit the extra quotes. That the non-working path has spaces in it is probably not the cause of the problem. If a string *literal* is used, e. g. "C:\Path\test file.txt" there may be combinations of the backslash and the character that follows that are interpreted specially -- in the example \P is just \ followed by a P whereas \t is a TAB (chr(9)): >>> print("C:\Path\test file.txt") C:\Path est file.txt To fix the problem either use forward slashes (which are understood by Windows, too) or or duplicate all backslashes, >>> print("C:\\Path\\test file.txt") C:\Path\test file.txt or try the r (for "raw string") prefix: >>> print(r"C:\Path\test file.txt") C:\Path\test file.txt This applies only to string literals in Python source code; if you read a filename from a file or get it as user input there is no need to process the string: >>> input("Enter a file name: ") Enter a file name: C:\Path\test file.txt 'C:\\Path\\test file.txt' > I'll happily RTFM, but I need some hints as to which FM to R > https://docs.python.org/3.5/tutorial/introduction.html#strings https://docs.python.org/3.5/reference/lexical_analysis.html#string-and-bytes-literals PS: Unrelated, but a portable way to combine paths is os.path.join() which will also insert the platform specific directory separator if necessary: >>> print(os.path.join("foo", "bar\\", "baz")) foo\bar\baz -- https://mail.python.org/mailman/listinfo/python-list