所以我有一个xml文件,一个python代码和一个fileList.txt。
我必须从xml文件中提取路径(已完成),并将其写入fileList.txt文件。我写它没有问题,但如果路径不存在,我想检查该文件。我只能通过这个。这是我写的。我尝试过for,但它没有用。提前致谢
fileList.txt:
USM/src/
蟒:
for racine in rootElements.findall('racine'):
path = racine.find('path').text
if path != None:
f_path = f_path + path + "/"
print f_path
file = open('fileList.txt','r')
while 1:
ligne = file.readline()
if(ligne == f_path):
print("path already present")
sys.exit(0)
else:
break
file.close()
file = open('fileList.txt','a')
f_path = f_path + "\n"
file.write(f_path)
file.close()
答案 0 :(得分:1)
你的无限while
循环只执行一次;检查第一行是否匹配,然后是否完全退出程序,如果不是,则退出循环。
这样的事情会更好:
with open('fileList.txt','r+') as myfile: #file is a builtin, don't name your file 'file'
for line in myfile:
if line.strip() == f_path:
print "path already present"
break
else:
myfile.write(f_path)
答案 1 :(得分:1)
其他的都很好,但是错误地将文件对象用于迭代。要解决此问题,请使用File.readlines()
方法创建可迭代列表。这是整个代码:
for racine in rootElements.findall('racine'):
path = racine.find('path').text
if path != None:
f_path = f_path + path + "/"
print f_path
file = open('fileList.txt','r')
with open('fileList.txt', 'r') as myfile:
for line in myfile.readlines() : # here is the fix
if line.strip() == f_path:
print("path already present")
sys.exit(0)
with open('fileList.txt','a') as myfile:
f_path = f_path + "\n"
myfile.write(f_path)
答案 2 :(得分:0)
file.readline()
将包含行终结符字符“\n
”。您可以尝试file.readline().strip()
删除前导空格和尾随空格。
此外,您的while
循环看起来不正确。它永远不会循环多次,因为它在第一行找到匹配并调用sys.exit(0)
,或者它不会并且点击break
来结束循环。
更好的方法而不是while
循环可能是:
for line in file:
if line.strip() == f_path:
print("path already present")
sys.exit(0)
file.close()
编辑 - 您报告获取“类型对象不可迭代”。这通常意味着for循环中的序列(此处为“file
”)不是可迭代类型。在您的示例代码中,file
是您之前打开的文件的名称。这是变量的错误名称,因为Python已经使用file
作为文件对象的类。也许你已经改变了代码,为文件变量使用了不同的名称,而没有更新我的例子来匹配?以下是您的程序的完整版本:
for racine in rootElements.findall('racine'):
path = racine.find('path').text
if path != None:
f_path = f_path + path + "/"
print f_path
file = open('fileList.txt','r')
with open('fileList.txt', 'r') as myfile:
for ligne in myfile:
if ligne.strip() == f_path:
print("path already present")
sys.exit(0)
with open('fileList.txt','a') as myfile:
f_path = f_path + "\n"
myfile.write(f_path)