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

Posted

技术标签:

【中文标题】Python - 从文本文件中读取逗号分隔值,然后将结果输出到文本文件[关闭]【英文标题】:How to read comma separated values from a text file, then output result to a text file? [closed] 【发布时间】:2014-03-11 18:35:08 【问题描述】:

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

文件.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

非常感谢。

【问题讨论】:

所以您似乎正在寻找可以读取 CSV 并计算总和的代码? 【参考方案1】:

欢迎来到 ***!

你的想法是对的,让我们从打开一些文件开始吧。

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"

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

之后,我们添加回车“\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)

【讨论】:

嗨,为什么这个答案是错误的? 因为您的代码不好而被否决。忽略有一个csv 模块可以为您完成大部分工作这一事实,您使用while 来迭代文件而不是for line in file,您没有使用with 语句文件处理,一般来说你似乎不太了解python。一般来说,这段代码并没有教导人们应该使用的正确习语。感觉就像你更习惯了java 或其他 c 风格的语言,只是在 python 中应用该语言的概念,那里有更好的方法。 您好 l4mpi,感谢您的回复,OP 表示他们希望以 .txt 格式输出文件,因此我避免使用 csv。我忘记了“for line in file”,现在我将用它来修改我的答案。我不熟悉“with”,您能否举例说明如何使用“with”打开文件流,因为我在网上找到的回复对我来说非常复杂。我只使用过python,正如你所说,不是很好。我最初是来***学习java的,但我想我最好还是多花点时间在/python上! 你似乎很困惑——一个csv文件只是一个普通的文本文件,你可以用任何你想要的结尾保存它,包括.txt。至于文件上下文中的 with 语句,你做with open("myfile.txt") as f,然后可以在 with 语句的块中使用文件对象;阻塞后会自动关闭。有关示例,请参见其他答案。 也许@EducateMe 没有写出最好的代码,但他的耐心和解释对于想要学习的初学者来说似乎很棒,我们需要这样有耐心的教育者。【参考方案2】:

您可以用更少的行来完成此操作,但我希望您发现此解决方案可读且易于理解:

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)

【讨论】:

【参考方案3】:

对于此任务,您可能不想直接处理程序中的文件,而是处理标准输入(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

【讨论】:

【参考方案4】:

想知道文件是否只有逗号分隔值,那么为什么不将文件保存为“.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
..

【讨论】:

【参考方案5】:
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))

【讨论】:

【参考方案6】:
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")))

【讨论】:

这既不是代码也不是高尔夫的答案。投反对票,因为我认为您的回答没有帮助,尤其是对新程序员而言。 我毫不费力地要求代码,我会打高尔夫球...在我看来,他写问题的时间比写代码的时间要多...

以上是关于Python - 从文本文件中读取逗号分隔值,然后将结果输出到文本文件[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Python STL csv

Python入门教程第72篇 读取CSV文件

在文本文件中使用逗号分隔值打印输出

python读写csv文件

从 xml 标签获取值到 unix 中的逗号分隔文本文件

Python读取复杂电子表格(CSV)数据小技巧一则