Python列表迭代问题

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中列出每个值直到

我很难弄明白,在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中列出,依此类推,直到完成最后一个列表

以下是指向我的结果图像和注释的链接:

下面是我的代码,但结果不是我所期望的,我很难确定我在这里做错了什么

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的开放功能,因为它会在完成/失败/崩溃/等时释放文件锁。您的代码语法不正确,请修复,因为它将不起作用。您的代码语法不正确,请修复,因为它将不起作用。