os.walk()没有拿起我的文件名

时间:2014-05-30 23:24:45

标签: python os.walk

我尝试使用python脚本在循环中编辑.html文件的大目录。我在使用os.walk()循环访问文件名时遇到问题。这段代码只是将html文件转换为我可以使用的字符串,但是脚本甚至没有进入循环,就像文件不存在一样。基本上它打印point1但从未到达point2。脚本结束时没有错误消息。该目录设置在名为" amazon"的文件夹中,其中有一个20级子文件夹,每个文件夹中有20个html文件。

奇怪的是,代码在仅包含.txt文件的邻居目录上运行良好,但似乎由于某种原因它没有抓取我的.html文件。有什么我不了解for root, dirs, filenames in os.walk()循环的结构吗?这是我第一次使用os.walk,我已经查看了这个网站上的其他一些页面,试图让它工作。

import os

rootdir = 'C:\filepath\amazon'
print "point1"
for root, dirs, filenames in os.walk(rootdir):
    print "point2"
    for file in filenames:
        with open (os.path.join(root, file), 'r') as myfile:
             g = myfile.read()
        print g

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:6)

反斜杠用作转义。要么将它们加倍,要么在其上加上前缀“r”来使用“原始字符串”。

示例:

>>> 'C:\filepath\amazon'
'C:\x0cilepath\x07mazon'
>>> r'\x'
'\\x'
>>> '\x'
ValueError: invalid \x escape

说明:In Python, what does preceding a string literal with “r” mean?

答案 1 :(得分:2)

您的问题是您在路径中使用反斜杠:

>>> rootdir = 'C:\filepath\amazon'
>>> rootdir
'C:\x0cilepath\x07mazon'
>>> print(rootdir)
C:
  ilepathmazon

因为Python字符串使用反斜杠来转义特殊字符,所以rootdir \f代表ASCII Form Feed字符,而\a代表ASCII {{3}字符。

你可以使用原始字符串(注意撇号之前的r)来避免这种情况:

>>> rootdir = r'C:\filepath\amazon'
>>> rootdir
'C:\\filepath\\amazon'
>>> print(rootdir)
C:\filepath\amazon

...或者只使用常规斜杠,无论如何都在Windows上Bell

>>> rootdir = 'C:/filepath/amazon'
>>> rootdir
'C:/filepath/amazon'
>>> print(rootdir)
C:/filepath/amazon

正如Huu Nguyen所指出的那样,在可能的情况下使用work fine构建路径被认为是一种良好的做法......这样就可以完全避免这个问题:

>>> rootdir = os.path.join('C:', 'filepath', 'amazon')
>>> rootdir
'C:\\filepath\\amazon'  # presumably ... I don't use Windows.
>>> print(rootdir)
C:\filepath\amazon

答案 2 :(得分:2)

您可以使用os.path.join

来避免显式处理任何类型的斜杠
rootdir = os.path.join('C:', 'filepath', 'amazon')

答案 3 :(得分:0)

我的问题与os.walk听起来类似。由于路径中的空格而添加到Mac上的文件路径的转义字符(\)导致了问题。

例如,路径:

/Volumes/MacHD/My Folder/MyFiles/...

通过终端访问时显示为:

/Volumes/MacHD/My\ Folder/MyFiles/...

解决方案是读取字符串的路径,然后创建一个删除转义字符的新字符串,例如:

# Ask user for directory tree to scan for master files
masterpathraw = raw_input("Specify directory of master files:")
# Clear escape characters from the path
masterpath = masterpathraw.replace('\\', '')
# Provide this path to os.walk
for fullpath, _, filenames in os.walk(masterpath):
    # Do stuff