【发布时间】:2015-12-18 10:00:24
【问题描述】:
新的 python 编码器。
设置一个非常基本的脚本来删除不同位置的各种文件, 本质上,一个防病毒脚本。该脚本似乎运行没有问题:
import os
my_tup = (
'/Users/kevin/Desktop/python/folder1/deleteme.txt',
'/Users/kevin/Desktop/python/folder2/deleteme.txt',
'/Users/kevin/Desktop/python/folder3/deleteme.txt')
for value in my_tup:
if os.path.isfile(value):
print (value, 'File exists\n')
else:
print (value, 'File Not Found\n')
我希望我的列表会变得很长,所以我现在使用一个可以添加的外部文件。外部文件只是路径名的元组。但是,现在循环说不存在任何文件,除了循环中的最后一个条目?
import os
datafile = open("data.txt","r")
for value in datafile.readlines():
if os.path.exists(value):
print (value, 'File exists\n')
else:
print("Sorry, file does not exist: %s" % value)
datafile.close()
这段代码的输出是:
抱歉,文件不存在:/Users/kevin/Desktop/python/folder1/deleteme.txt
抱歉,文件不存在:/Users/kevin/Desktop/python/folder2/deleteme.txt
抱歉,文件不存在:/Users/kevin/Desktop/python/folder3/deleteme.txt
/Users/kevin/Desktop/python/folder1/deleteme.txt 文件存在
希望这是有道理的。 谢谢
【问题讨论】:
-
请修正你的第二个代码块的缩进,现在你有一个
for-else语句,我希望这不是你实际运行的语句 -
如果您键入的代码与此处显示的完全相同,则问题是缩进,因为 else 子句与 for 循环处于相同的缩进级别,而不是 if 条件。在 Python 中,你可以在 for 后面加上 else 子句。检查一下。
-
顺便说一句,您可以将
for value in datafile.readlines():替换为for value in datafile:,因为文件对象将迭代文件的行。 -
@tdelaney:
s/can replace/should replace/;.readlines()会急切地吞下整个文件,直到读入整个文件才开始迭代,因此它比直接迭代文件对象更慢并且需要更多内存。 -
另外,请使用
with语句。显式的.close()容易因为异常而忘记或跳过;以with open("data.txt","r") as datafile:开头的块不需要close;当控制流离开with块时,它会自动发生。
标签: python