我正在尝试使用Python编写脚本以读取N个文件夹(Folder001 -..- Folder006)中的.csv文件(File001 -..- File010)的最后一个元素(右下),并进行一些操作(总共10 * 6 = 60个.csv文件)。 .csv文件具有行数变量。
我对脚本的想法:
我需要一些帮助来读取.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
答案 0 :(得分:0)
恐怕您的问题不太清楚,但我想您想要类似的东西
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
而不是尝试简单地用逗号分割。
答案 1 :(得分:0)
非常感谢!我在此解决方案中对您的解决方案进行了少许修改:
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
一切正常。