Python列表迭代麻烦

我有一个非常困难的时间搞清楚我做错了在Windows中运行我的Python脚本来获得预期的结果。

我有一个目录与list1.txt,list2.txt,list3.txt,list4.txtlist5.txt 。 每个列表都包含独立的行string,如list1.txt将item1,item2,item3,item4item5分别作为单独行上的值。 然后list2.txt将在不同的行上有item6-item10,依此类推。

我需要做的就是说,对于这个目录中的每个文本文件,列出list1中的每个值直到完成,然后列出list2中的每个值,然后列出list3,直到完成最后一个列表。

这里是一个链接到我的结果的形象与笔记: https : //i.imgur.com/YBxQUqi.png

我在下面的代码,但结果不是我所期待的,我有​​一个极端困难的时间来确定我在这里做错了什么。

def my_range(start, end, step): while start <= end: yield start start += step for x in my_range(1, 5, 1): import os rootdir = os.getcwd() fis = rootdir + "\list\list" + str(x) + ".txt" files = open(fis,'rU') lines = files.readlines() print(lines) print(fis) for line in lines: print("Item = " + line) 

我需要从lists.txt文件中的每个文件读取结果,并从每个文件中的每个值读取结果,而不仅仅是最后一个文件。 我认为我没有正确的嵌套for循环,我只是无法弄清楚。 我也testing了传递参数给一个函数,并定义了一个函数来完成这个工作,而且我完全理解了这个脚本。

请任何人都帮助我,当你可以解决这个问题,我无法弄清楚,只是把头发拉出来。

你的第二个循环需要成为主循环的一个子循环。 另外,每次循环时都不要import os ,只需要一次。 你的代码应该是这样的:

 def my_range(start, end, step): while start <= end: yield start start += step import os for x in my_range(1, 5, 1): rootdir = os.getcwd() fis = rootdir + "\list\list" + str(x) + ".txt" files = open(fis,'rU') lines = files.readlines() print(lines) print(fis) for line in lines: print("Item = " + line) 

但是,我会评论说,你应该改为使用with open(fid,'rU') as f:方法,因为如果代码出错或崩溃,将会释放文件被锁定。 那么你可以做这样的事情:

 def my_range(start, end, step): while start <= end: yield start start += step import os for x in my_range(1, 5, 1): rootdir = os.getcwd() fis = rootdir + "\list\list" + str(x) + ".txt" with open(fis,'rU') as files: print(fis) for line in files: print("Item = " + line) 

它看起来像你的缩进是关闭的:

 for x in my_range(1, 5, 1): import os ... for line in lines: # this should be inside the loop print("Item = " + line) 

然而,你正在走的这是一个非常迂回的方式,我会推荐这样的事情:

 for root, dirs, files in os.walk(starting_dir): # iterate over directory for f in files: # iterate over files with open(f) as in_file: # open file for line in in_file.readlines(): # iterate over lines print line # print each line (or do something else) 

使用os.path.join来创建文件的路径。 我做了一些改进,我会在下面讨论。

 #!/usr/bin/env python import os rootdir = os.getcwd() for x in range(1, 4): filename = 'list' + str(x) + '.txt' fis = os.path.join(rootdir, 'list', filename) files = open(fis,'rU') lines = files.readlines() print(lines) print(fis) for line in lines: print("Item = " + line) 

我也没有看到自己迭代的任何一点。 你为什么不在开始时简单地使用range(1, 5) ? 下一步:使名称具有描述性。 现在看起来似乎并不重要,但一周之后,你会问自己:“我到底想干什么”。 任何IDE将使长工作更容易,相信我,写data_file_name或类似比dfs更愉快等。不要导入任何东西在一个循环。 它降低了效率。 另外rootdir变量可以被声明一次。

你循环所有的文件,但只显示最后一个文件的结果。 你需要缩进第二个循环:

 for x in my_range(1, 5, 1): import os rootdir = os.getcwd() fis = rootdir + "\list\list" + str(x) + ".txt" files = open(fis,'rU') lines = files.readlines() print(lines) print(fis) for line in lines: #INDENT LIKE SO print("Item = " + line)