0

所以我有一个 xml 文件、一个 python 代码和一个 fileList.txt。

我必须从 xml 文件中提取路径(已完成),并将其写入 fileList.txt 文件。我写它没有问题,但如果路径不存在,我想签入该文件。我只能度过这个难关。这是我写的。我尝试了for,但它没有用。提前致谢

fileList.txt: 
USM/src/

Python:

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() 
4

3 回答 3

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)
于 2012-10-03T12:51:41.840 回答
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)
于 2015-01-15T14:55:46.180 回答
0

file.readline()将包括行终止符“ \n”。您可以尝试file.readline().strip()删除前导和尾随空格。

此外,您的while循环看起来不正确。它永远不会循环超过一次,因为它要么在第一行找到匹配项并调用sys.exit(0),要么没有找到匹配项并点击breakto 结束循环。

比循环更好的方法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)
于 2012-10-03T12:46:40.107 回答