猿问

循环文件夹和 csv 文件

我正在尝试用 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 


holdtom
浏览 198回答 2
2回答

慕标琳琳

恐怕你的问题不是很清楚,但我想你想要这样的import osN = 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而不是尝试简单地以逗号分隔。

DIEA

万分感谢!我在这个解决方案中稍微修改了您的解决方案:N = 6def 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它工作正常。
随时随地看视频慕课网APP

相关分类

Python
我要回答