Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python—从文本文件中读取逗号分隔的值,然后将结果输出到文本文件_Python_Loops_Csv - Fatal编程技术网

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

Python—从文本文件中读取逗号分隔的值,然后将结果输出到文本文件,python,loops,csv,Python,Loops,Csv,基本上,我需要创建一个程序,该程序将添加从文本文件中读取的数字,并用逗号分隔。即 在 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 我想要的是,它将遍历文本文件中的每一行,这将是一个简单的循环 但是,我也不知道如何将结果输出到另一个文本文件。 i、 e.answers.txt 六, 十五 二十四 非常感谢。您可以用更少的行完成

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

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

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

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

六,

十五

二十四


非常感谢。

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

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")))
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)

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

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

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

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

您始终可以使用csv阅读器读取文档中提到的任何csv文件:

您的场景的快速示例:

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

欢迎来到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"
我们必须将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并计算总和的代码?这既不是代码也不是答案。我不认为你的答案是有帮助的,尤其是对于一个新的程序员来说,MH不需要太多的努力就要求代码,我会打高尔夫球。在我看来,他写问题的时间比写代码的时间要多…嗨,为什么这个答案错了?因为你的代码不好,所以被否决了。忽略有一个
csv
模块可以为您完成大部分工作这一事实,您正在使用
而不是
来迭代文件中的行
,您没有使用
语句来处理文件,而且总体上您似乎不太了解python。一般来说,这段代码并没有教给我们应该使用的正确习惯用法;感觉你更习惯于java或其他c风格的语言,只是在python中应用该语言的概念,在python中有更好的方法。嗨,l4mpi,感谢您的回复,OP表示他们希望文件输出为.txt格式,所以我避免使用csv。我忘记了“文件中的行”,我现在就用它来修改我的答案。我不熟悉“with”,请您给出一个如何使用“with”打开文件流的示例,因为我在网上找到的回复对我来说非常复杂。我只使用过python,正如您所说,不是很好。我最初来到stackoverflow是为了学习java,但我想我最好花更多的时间在/python上!您似乎有点困惑-csv文件只是一个普通的文本文件,您可以用任何结尾保存它,包括
.txt
。对于文件上下文中的with语句,您可以将open(“myfile.txt”)作为f
使用,然后可以使用with语句块中的file对象;它将在阻塞后自动关闭。请参见其他答案中的例子。也许@EducateMe没有写出最好的代码,但他的耐心和解释对于想要学习的初学者来说似乎很棒,我们需要像这样耐心的教育者。
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)
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))