我很难弄清楚我在 Windows 中运行我的 python 脚本以获得预期结果时做错了。
我有一个包含 list1.txt、list2.txt、list3.txt、list4.txt 和 list5.txt 的目录。每个列表都包含唯一的单独的行字符串,例如 list1.txt 将在单独的行上将 item1、item2、item3、item4 和 item5 作为值。然后 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 循环,我就是想不通。我还测试了将参数传递给函数并定义了一个函数来执行此操作,并且我完全控制了尝试该操作的脚本。
如果你能解决这个问题,请任何人帮助我,我无法弄清楚,只是把我的头发从头上拉下来。
最佳答案
您的第二个 for
循环需要是第一个循环的子循环。还有,不要每次循环都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)
关于Python 列表迭代问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39169214/