Python列表迭代问题
我很难弄明白,在Windows中运行python脚本以获得预期结果是错误的 我有一个包含list1.txt、list2.txt、list3.txt、list4.txt和list5.txt的目录。每个列表都包含单独的行字符串,这些行字符串是唯一的,例如list1.txt将在单独的行中分别使用item1、item2、item3、item4和item5作为值。然后list2.txt将在单独的行中包含item6-item10,依此类推 我需要做的是,对于这个目录中的每个文本文件,在列表1中列出每个值直到完成,然后在列表2中列出每个值,然后在列表3中列出,依此类推,直到完成最后一个列表 以下是指向我的结果图像和注释的链接: 下面是我的代码,但结果不是我所期望的,我很难确定我在这里做错了什么Python列表迭代问题,python,windows,Python,Windows,我很难弄明白,在Windows中运行python脚本以获得预期结果是错误的 我有一个包含list1.txt、list2.txt、list3.txt、list4.txt和list5.txt的目录。每个列表都包含单独的行字符串,这些行字符串是唯一的,例如list1.txt将在单独的行中分别使用item1、item2、item3、item4和item5作为值。然后list2.txt将在单独的行中包含item6-item10,依此类推 我需要做的是,对于这个目录中的每个文本文件,在列表1中列出每个值直到
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循环需要是主循环的一个子循环。另外,不要每次循环导入操作系统,只需导入一次即可。您的代码应该如下所示:
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)
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 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)
第二个for循环需要是主循环的子循环。另外,不要每次循环导入操作系统,只需导入一次即可。您的代码应该如下所示:
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)
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 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)
您正在循环浏览所有文件,但只显示最后一个文件的结果。您需要缩进第二个for循环:
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)
您正在循环浏览所有文件,但只显示最后一个文件的结果。您需要缩进第二个for循环:
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)
看起来您的缩进已关闭:
for x in my_range(1, 5, 1):
import os
...
for line in lines: # this should be inside the loop
print("Item = " + line)
然而,你要走的是一条非常迂回的道路,我建议你这样做:
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)
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 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)
看起来您的缩进已关闭:
for x in my_range(1, 5, 1):
import os
...
for line in lines: # this should be inside the loop
print("Item = " + line)
然而,你要走的是一条非常迂回的道路,我建议你这样做:
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)
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 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)
我也看不出让自己变得容易接受有什么意义。为什么不在一开始就使用range1,5呢?下一步:使名称具有描述性。现在,这似乎并不重要,但一周后你会问自己,我说的fis到底是什么意思。任何IDE都会使使用长名称更容易,而且相信我,编写数据、文件名或类似的东西比dfs等更令人愉快。不要在循环中导入任何内容。它降低了效率。rootdir变量也可以声明一次。使用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)
我也看不出让自己变得容易接受有什么意义。为什么不在一开始就使用range1,5呢?下一步:使名称具有描述性。现在,这似乎并不重要,但一周后你会问自己,我说的fis到底是什么意思。任何IDE都会使使用长名称更容易,而且相信我,编写数据、文件名或类似的东西比dfs等更令人愉快。不要在循环中导入任何内容。它降低了效率。另外,rootdir变量可以声明一次。Pro提示:如果可能,请始终在问题中包含您的输出,因为链接会随着时间的推移而中断。对我来说,这可能只是一个缩进问题。试试最后一行indented@SlickNutz除非我弄错了,否则发布图像或文本不需要重复。我猜下面的答案中提到的是缩进问题,但我也在下面指出,最好使用Python的开放功能,因为它会在完成/失败/崩溃等时释放文件锁,始终在问题中包含您的输出,因为链接会随着时间的推移而中断。对我来说,这可能只是一个缩进问题。试试最后一行indented@SlickNutz除非我弄错了,否则发布图像或文本不需要重复。下面的答案中提到的我的猜测是缩进问题,但我也在下面指出,最好使用Python的开放功能,因为它会在完成/失败/崩溃/等时释放文件锁。您的代码语法不正确,请修复,因为它将不起作用。您的代码语法不正确,请修复,因为它将不起作用。