【问题标题】:How to add lines containing numbers from a folder line by line with Python?如何使用Python逐行添加包含文件夹中数字的行?
【发布时间】:2022-09-28 00:58:25
【问题描述】:

我需要 Python 执行以下操作:

  1. 打开文件夹。
  2. 查找具有 \".txt\" 格式的文件
  3. 打开找到的文件。
  4. 从每个文件中读取一行并添加数字。
  5. 执行步骤 4 直到文件结束(5 行)。
  6. 将获得的数字除以打开的文件数(获取平均成绩)。
  7. 将结果写入同一文件夹中的“finish.txt”文件中。

    我写了一个代码,但它不起作用。如果你能解决它,请做。 您也可以通过另一个代码解决我的问题。

    import os
    path = str(os.path.dirname(__file__))+\"\\\\files\"
    os.chdir(path)
    def sl (fp):
        path = str(os.path.dirname(__file__))+\"\\\\files\"
        L=len([name for name in os.listdir(path) if 
    os.path.isfile(os.path.join(path, name))])
        if L:
            if file.endswith(\".txt\"):
                Length=L
            else:
                Length=1
        finish=open(os.path.dirname(__file__)+\"\\\\finish.txt\", 
    \"w\")
        Sum1=0
        Sum2=0
        Sum3=0
        Sum4=0
        Sum5=0
        with open(file_path, \'r\') as fp:
            line_numbers = [0, 1, 2, 3, 4]
            lines = []
            for i, line in enumerate(fp):
                if i in line_numbers:
                    lines.append(line.strip())
                    if i==0:
                        Sum1+=int(line)
                    if i==1:
                        Sum2+=int(line)
                    if i==2:
                        Sum3+=int(line)
                    if i==3:
                        Sum4+=int(line)
                    if i==4:
                        Sum5+=int(line)
                elif i > 4:
                    break
            Write=str(int(Sum1/Length))+\"\\n\"+str(int(Sum2/Length))+\"\\n\"+str(int(Sum3/Length))+\"\\n\"+str(int(Sum4/Length))+\"\\n\"+str(int(Sum5/Length))+\"\\n\"
    
    finish.write(Write+str((Sum1+Sum2+Sum3+Sum4+Sum5)/Length))
            finish.close()
        # iterate through all file
        for file in os.listdir():
        # Check whether file is in text format or not
        if file.endswith(\".txt\"):
            file_path = f\"{path}\\{file}\"
            sl(file_path)
    
  • 不清楚你想要什么。你想要所有线路 1 的平均值,然后是所有线路 2 的平均值,然后是所有线路 3 的平均值,等等?如果是这样,那么您必须收集所有文件的总和。在阅读完每个文件之前,您无法打印任何结果。

标签: python python-3.x for-loop math txt


【解决方案1】:

正如我所描述的,如果您想要所有线路 1 的平均值,以及所有线路 2 的平均值等,那么这将完成。

请注意,不必每次都指定路径,因为您使用chdir 将其设为当前目录。请注意,我将所有总和保存在一个列表中。任何时候你发现自己使用名为xxx1xxx2xxx3 等的变量,你需要用一个列表替换那个集合。最后,请注意,我会等到所有文件都被读取后才计算结果。

import os
path = str(os.path.dirname(__file__))+"\\files"
os.chdir(path)

sums = [0,0,0,0,0]
count = 0

for name in os.listdir('.'):
    if name.endswith(".txt"):
        count += 1
        for num, line in enumerate(open(name, 'r')):
            if num > 4:
                break
            sums[num] += float(line.strip())

finish = open("finish.txt",'w')
for i in sums:
    print( i/count, file=finish)
print(sum(sums) / count, file=finish)
finish.close()

【讨论】:

  • 这段代码有一些我试图修复的错误。但感谢您的善意和分享您的知识。这是已解决的部分: 在第 11 行:for num, line in enumerate(open(name, 'r')): 因为如果你不使用 from enumerate,它会给出 ValueError: too many values to unpack (expected 2 ) 错误。在第 14 行: sums[num] += float(line.strip()) 因为如果数字是整数,则会出错。 (平均值通常是浮点数,而不是整数)。再次感谢您解决了我的问题。感谢您分享您的知识。
猜你喜欢
  • 1970-01-01
  • 2021-12-26
  • 1970-01-01
  • 2014-07-15
  • 2022-07-20
  • 2013-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多