Python写在文本文件上

时间:2012-10-03 12:43:20

标签: python file

所以我有一个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() 

3 个答案:

答案 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)