为了账号安全,请及时绑定邮箱和手机立即绑定

循环文件夹和 csv 文件

循环文件夹和 csv 文件

holdtom 2021-08-11 17:35:56
我正在尝试用 Python 编写一个脚本来读取 N 个文件夹(Folder001-..-Folder006)中 .csv 文件(File001-..-File010)的最后一个元素(右下角)并进行一些操作(总共 10* 6 = 60 个 .csv 文件)。.csv 文件的行数可变。我对剧本的想法:N 是文件夹的数量,P 是每个文件夹内的 .csv 文件的数量;进入文件夹 1,输入 P .csv 文件只读取它们的最后一个元素(右下)并将其写在列表中(P 元素);对这个列表中的所有元素求和并将结果写入列表输出(N 个元素)对文件夹 2 等执行相同操作。我需要一些帮助来读取 .csv 文件及其循环中的最后一个元素。我阅读了很多帖子,但不幸的是我无法应用它们。N = 6P = 10def 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 
查看完整描述

2 回答

?
慕标琳琳

TA贡献1830条经验 获得超9个赞

恐怕你的问题不是很清楚,但我想你想要这样的


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;但我不完全确定我猜对了你的代码应该在这里做什么。以上只是从每个文件的最后一行中获取最后一个逗号分隔的字段,并将字符串转换为数字。该函数返回每个文件夹中数字总和的列表。


如果文件很大,也许可以考虑优化获取最后一行的逻辑。如果您知道或可以合理地猜测最后一行可以有多长,请从文件末尾找回多少字节;参见例如使用 Python 获取文件的最后 n 行,类似于 tail


如果 CSV 格式有引用字段之类的复杂性,请使用csvreader而不是尝试简单地以逗号分隔。


查看完整回答
反对 回复 2021-08-11
?
DIEA

TA贡献1820条经验 获得超2个赞

万分感谢!我在这个解决方案中稍微修改了您的解决方案:


N = 6

def calculate_output(N):

    output = []

    for i in range(N):

        prob = []

        dirname = "./Folder00" + str(i+1)

        for filename in os.listdir(dirname):

            if filename.endswith(".csv"):

                with open(os.path.join(dirname, filename)) as csv:

                    for line in csv:

                        pass

                    # line now contains last line

                    prob.append(int(line.rstrip('\n').split(',')[-1]))

        output.append(sum(prob))

    return output

它工作正常。


查看完整回答
反对 回复 2021-08-11
  • 2 回答
  • 0 关注
  • 197 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信