我创建了一个脚本来查看文件夹中的所有文件并打印每个文件的完整路径。 脚本正在运行并在命令提示符(Windows)
中打印输出import os
root = 'C:\Users\marco\Desktop\Folder'
for path, subdirs, files in os.walk(root):
for name in files:
print os.path.join(path, name)
我现在想要将输出保存在txt文件中,因此我编辑了将os.path.join(path,name)
分配给变量values
的代码,但是当我打印输出时,脚本会给我一个错误< / p>
import os
root = 'C:\Users\marco\Desktop\Folder'
for path, subdirs, files in os.walk(root):
for name in files:
values = os.path.join(path, name)
file = open('sample.txt', 'w')
file.write(values)
file.close()
错误
file.write(values)
NameError: name 'values' is not defined
答案 0 :(得分:3)
试试这个:
file = open('sample.txt', 'w')
for path, subdirs, files in os.walk(root):
for name in files:
values = os.path.join(path, name)
file.write(values+'\n')
file.close()
请注意,file
是Python中的内置符号(在此处被覆盖),因此我建议您将其替换为fileDesc
或类似内容。
答案 1 :(得分:1)
导入os
root = 'C:\Users\marco\Desktop\Folder'
file = open('sample.txt', 'w')
for path, subdirs, files in os.walk(root):
for name in files:
values = os.path.join(path, name)
file.write(values)
file.close()
值未在文件的词法范围内定义为availbale。它在一个内循环范围内。如上所述改变它,将起作用。
答案 2 :(得分:1)
问题是变量values
仅限于内部for循环的范围。因此,在开始迭代之前,将空值分配给变量。就像values=None
或更好values=''
现在假设上面的代码工作,你就不会得到你想要的输出文件。你看,变量值正在定期更新。因此,在迭代之后,遇到的最后一个文件的位置将存储在值中,然后将这些值写入sample.txt
文件中。
您似乎遵循的另一个不良做法是在字符串中使用\
而不是\\
。这可能会在以后咬你(如果他们还没有)。您看到\
后跟一个字母表示转义序列\字符,\\
是斜杠的转义序列。
所以这是一个经过重新设计的工作示例代码:
import os
root = 'C:\\Users\\marco\\Desktop\\Folder'
values=''
for path, subdirs, files in os.walk(root):
for name in files:
values = values + os.path.join(path, name) + '\n'
samplef = open('sample.txt', 'w')
samplef.write(values)
samplef.close()
如果您不熟悉,'\n'
表示换行的转义序列。如果所有文件都写在同一行上,那么读取输出文件会非常繁琐。
PS:我用叮嘱做了代码,因为这是我在这种情况下更喜欢的,但是你可以试试数组或列表或者什么不是。请确保您事先定义变量,以免超出范围。