用python在另一个文件中写入文件行

2024-03-28 16:14:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在output1_file中从input_file写入行,但当我运行程序时,它不会将第一行写入输出文件。你知道吗

import csv    

from statistics import mean
from typing import TextIO 

def calculate_averages(input_file_name, output_file_name):
with (open(input_file_name, 'r')) as fin:
    line=fin.readline()
    while line:
        line = fin.readline()
        with open (output_file_name,'a') as f:
            f.write((line.strip()))
            f.write('\n')
            f.close()
    line = fin.readline()
return f
calculate_averages('input.csv', 'output1.csv')

我的输入文件是:

mandana,5,7,3,15
hamid,3,9,4,20,9,1,8,16,0,5,2,4,7,2,1
sina,19,10,19,6,8,14,3
sara,0,5,20,14
soheila,13,2,5,1,3,10,12,4,13,17,7,7
ali,1,9
sarvin,0,16,16,13,19,2,17,8

但我的输出文件是:

 hamid,3,9,4,20,9,1,8,16,0,5,2,4,7,2,1
 sina,19,10,19,6,8,14,3
 sara,0,5,20,14
 soheila,13,2,5,1,3,10,12,4,13,17,7,7
 ali,1,9
 sarvin,0,16,16,13,19,2,17,8

第一行不见了。你知道吗


Tags: 文件csvnamefromimportinputoutputreadline
2条回答

因为您在第一次写入之前调用了readline两次。你知道吗

一些提示:

1、用with语句打开文件时不需要使用f.close()。你知道吗

2,不需要返回f。你知道吗

下面是我重构的代码。你知道吗

import csv

from statistics import mean
from typing import TextIO


def calculate_averages(input_file_name, output_file_name):
    with open(input_file_name, 'r') as fin:
        line = fin.readline()
        with open(output_file_name, 'a') as f:
            while line:
                f.write((line.strip()))
                f.write('\n')
                line = fin.readline()


calculate_averages('input.csv', 'output1.csv')

在写入输出文件之前,第一个line=fin.readline()中的line值会被下一个line=fin.readline()覆盖。你知道吗

相反,您应该使用for循环将file对象作为迭代器进行迭代:

def calculate_averages(input_file_name, output_file_name):
    with open(input_file_name, 'r') as fin, open(output_file_name,'a') as f:
        for line in fin:
            f.write(line.strip() + '\n')

相关问题 更多 >