Python - 从文本文件中读取逗号分隔值,然后将结果输出到文本文件

时间:2014-02-13 03:48:11

标签: python loops csv

基本上我需要创建一个程序来添加从逗号分隔的文本文件中读取的数字。即

in

file.txt的

  

1,2,3

     

4,5,6

     

7,8,9-

到目前为止,我有简单的代码

x = 1
y = 2
z = 3

sum=x+y+z

print(sum)

我不确定如何将文本文件中的每个数字分配给x,y,z。

我想要的是它将迭代文本文件中的每一行,这将是一个简单的循环。

但是我也不知道如何将结果输出到另一个文本文件。 即answers.txt

  

6

     

15

     

24

非常感谢。

6 个答案:

答案 0 :(得分:10)

欢迎使用StackOverflow!

你有正确的想法,让我们先打开一些文件。

with open("text.txt", "r") as filestream:
    with open("answers.txt", "w") as filestreamtwo:

在这里,我们打开了两个文件流“text.txt”和“answers.txt”。

由于我们使用“with”,因此这些文件流将在它们下面的空白代码完成运行后自动关闭。

现在,让我们逐行浏览“text.txt”文件。

for line in filestream:

这将运行for循环并在文件末尾结束。

接下来,我们需要将输入文本更改为我们可以使用的内容,例如数组!

currentline = line.split(",")

现在,“currentline”包含“text.txt”第一行中列出的所有整数。

让我们总结这些整数。

total = str(int(currentline[0]) + int(currentline[1]) + int(currentline [2])) + "\n"

我们必须围绕“currentline”数组中的每个元素包装int函数。否则,我们将串联字符串而不是添加整数!

之后,我们添加回车符“\ n”,以使“answers.txt”更清晰易懂。

filestreamtwo.write(total)

现在,我们正在写文件“answers.txt”......就是这样!你做完了!

这是代码:

with open("test.txt", "r") as filestream:
    with open("answers.txt", "w") as filestreamtwo:
        for line in filestream:
            currentline = line.split(",")
            total = str(int(currentline[0]) + int(currentline[1]) + int(currentline [2])) + "\n"
            filestreamtwo.write(total)

答案 1 :(得分:0)

你可以用更少的行来做到这一点,但我希望你发现这个解决方案可读且易于理解:

out = file('answers.txt', 'w')
for line in file('file.txt', 'r'):
    s = 0
    for num in line.strip().split(','):
        s += int(num)
    out.write("%d\n" % s)

答案 2 :(得分:0)

对于此任务,您可能希望不直接使用程序中的文件,而是使用标准输入(Python 2中的input()raw_input())和标准输出(仅print() )。

然后在调用脚本期间指定输入和输出文件名:

python script.py < file.txt > answer.txt

使用此方案,您可以拥有这样的程序(Python 2.7):

while (True):
    try:
        x, y, z = [int(val) for val in raw_input().split(',')]
        print (x + y + z)
    except EOFError:
        pass

答案 3 :(得分:0)

想知道文件是否只有逗号分隔值,那么为什么不将文件保存为“.csv”格式。如果可以的话:

您可以随时使用csv阅读器阅读文档中提到的任何CSV文件:http://docs.python.org/2/library/csv.html

您的方案的快速示例:

with open('test.csv','rb') as csvfile:
    csvreader = csv.reader(csvfile)
    output_fil = open('output.txt', 'ab')
    for row in csvreader:
        result = 0
        for elem in row:
            result = result + int(elem)
        print result
        output_fil.writelines(str(result))

text.csv包含如下输入:

1,2,3
4,5,6
...

和output.txt应包含:

6
15
..

答案 4 :(得分:0)

INFILE = "input.csv"
OUTFILE = "my.txt"

def row_sum(row, delim=","):
    try:
        return sum(int(i) for i in row.split(delim))
    except ValueError:
        return ""

with open(INFILE) as inf, open(OUTFILE, "w") as outf:
    outf.write("\n".join(str(row_sum(row)) for row in inf))

答案 5 :(得分:-1)

with open("file2.txt","w") as f:
    print >> f,"\n".join(map(lambda x:str(sum(int(y) for y in x.split(","))),open("file1.txt")))