【问题标题】:Using a loop to open and process txt files with csv使用循环打开和处理带有 csv 的 txt 文件
【发布时间】:2020-12-05 16:13:46
【问题描述】:

我有数据(txt 文件中的混合文本和数字),我想编写一个 for 循环来创建列表列表,这样我就可以使用更少的行来处理所有文件中的数据。

到目前为止,我已经写了这个:

import csv

path = (some path...)
files = [path + 'file1.txt',path + 'file2.txt', path + 
'file3.txt', ...]

for i in files:
    with open(i, 'r') as j:
        Reader = csv.reader(j)
        List = [List for List in Reader]

我想我会覆盖 List 而不是创建嵌套列表,因为我得到了大小为 1 的 Reader 和一个包含其中一个文件尺寸的列表。

我的问题:

  1. 鉴于文件可能包含不同的行号,保存一些代码行是否正确? (还有什么可以做得更好?)
  2. 我认为问题出在[List for List in Reader],有没有办法改变它,这样我就不会覆盖List?比如添加到List?

【问题讨论】:

    标签: python csv for-loop syntax


    【解决方案1】:

    您可以使用列表append() 方法添加到现有的list。由于csv.reader 实例是可迭代对象,您只需将其中一个传递给方法,如下所示:

    import csv
    from pathlib import Path
    
    path = Path('./')
    filenames = ['in_file1.txt', 'in_file2.txt']  # etc ...
    List = []
    
    for filename in filenames:
        with open(path / filename, 'r', newline='') as file:
            List.append(list(csv.reader(file)))
    
    print(List)
    

    更新

    更简洁的方法是使用称为“list comprehension”的东西:

    import csv
    from pathlib import Path
    
    path = Path('./')
    filenames = ['in_file1.txt', 'in_file2.txt']  # etc ...
    List = [list(csv.reader(open(path / filename, 'r', newline='')))
                for filename in filenames]
    
    print(List)
    

    【讨论】:

    • 路径的好主意。创建的列表不是所请求的列表列表,因此很难区分文件。
    • 哦……在那种情况下,我猜你想要一个 list-of-lists-of-lists。见更新。另外,是的,使用pathlib 通常是一种很好的做事方式——我正在努力养成使用它而不是os.path 的习惯。
    【解决方案2】:

    是的,使用.append():

    import numpy as np
    import matplotlib.pyplot as plt
    import csv
    path = (some path...)
    files = [path+x for x in ['FILESLIST']]
    
    for i in files:
        with open(i, 'r') as j:
            Reader = csv.reader(j)
            List.append([L for L in Reader])
    

    【讨论】:

      猜你喜欢
      • 2023-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-20
      • 1970-01-01
      • 2021-03-16
      相关资源
      最近更新 更多