【问题标题】:Loop over folders and csv files循环遍历文件夹和 csv 文件
【发布时间】:2019-04-11 21:49:59
【问题描述】:

我正在尝试用 Python 编写一个脚本来读取 N 个文件夹 (Folder001-..-Folder006) 中 .csv 文件 (File001-..-File010) 的最后一个元素 (右下角) 并进行一些操作 (总共 10*6 = 60 个 .csv 文件)。 .csv 文件的行数可变。

我对脚本的想法:

  • N 是文件夹数,P 是每个文件夹内的 .csv 文件数;
  • 输入文件夹 1,输入 P .csv 文件,仅读取其最后一个元素(右下)并将其写在一个列表中(P 元素);
  • 将此列表中的所有元素求和并将结果写入列表输出(N 个元素)
  • 对文件夹 2 等执行相同操作。

我需要一些帮助来读取 .csv 文件及其在循环中的最后一个元素。我读了很多帖子,但很遗憾我无法应用它们。

N = 6
P = 10

def calculate_output(N, P):
    output = []    
    for i in range(N):        
        for j in range(P):    
            prob = []    
            if FILE NAMES ENDS WITH (".csv") in "./Folder00"+str(i+1):    
                prob.append(BOTTOM RIGHT ELEMENT OF THE FILE)    
        output.append(sum(prob[p] for p in range(P)))    
    return output 

【问题讨论】:

    标签: python loops csv


    【解决方案1】:

    恐怕你的问题不是很清楚,但我猜你想要类似的东西

    import os
    
    N = 6
    # P = 10  # ????
    
    def calculate_output(N, P):
        output = []
        for i in range(N):
            dirname = "./Folder00" + str(i+1)
            for filename in os.listdir(dirname):
                probsum = 0
                if filename.endswith(".csv"):
                    with open(os.path.join(dirname, filename) as csv:
                        for line in csv:
                            pass
                        # line now contains last line
                        probsum += int(line.rstrip('\n').split(',')[-1])
            output.append(probsum)
        return output
    

    如果您在每个文件夹中有 10 个 CSV 文件,那么您实际上不需要任何参数 P;但我不完全确定我猜对了你的代码应该在这里做什么。以上只是从每个文件的最后一行中获取最后一个以逗号分隔的字段,并将其从字符串转换为数字。该函数返回每个文件夹中数字总和的列表。

    如果文件很大,可以考虑优化获取最后一行的逻辑。如果您知道或可以合理地猜出最后一行可以有多长,请从文件末尾查找那么多字节;参见例如Get last n lines of a file with Python, similar to tail

    如果 CSV 格式存在引用字段等复杂情况,请使用 csvreader 而不是尝试简单地以逗号分隔。

    【讨论】:

      猜你喜欢
      • 2014-04-10
      • 1970-01-01
      • 1970-01-01
      • 2019-07-21
      • 2021-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多