在CSV中写入函数的结果

时间:2018-07-26 11:38:29

标签: python python-3.x csv

我正在尝试在csv中写入函数的结果。不幸的是,没有熊猫。

csv文件输入:

Hello all well?
today is cold!
I have not had lunch yet
He does not have many brothers or sisters.
We are sick

脚本:

import re
import csv
import string

with open('teste_csv.csv', 'r') as f:
    file = csv.reader(f)

    for line in file:
        message = ''.join(line)

        def toto(message):

            message = message.lower()

            p = re.compile('|'.join(map(re.escape, string.punctuation)))
            no_punct = p.sub(' ', message)

            writer = csv.writer(open('result.csv', 'w'))
            for row in no_punct:
                writer.writerow(row)

                return writer

         print(toto(message))

在我的终端上,我有<_csv.writer对象,位于0x7fee60e57c50>,在我的result.csv中,我只有一行写为'w'。我希望每一行都在我的result.csv

2 个答案:

答案 0 :(得分:3)

由于您每次调用toto都会打开result.csv进行写入,因此您会一直擦除文件,因此只剩下一次写入操作。您需要打开文件一次,并创建一次写入器。您也只需要为此定义一次功能:

import re
import csv
import string

def toto(message,writer):
    message = message.lower()
    p = re.compile('|'.join(map(re.escape, string.punctuation)))
    no_punct = p.sub(' ', message)
    for row in no_punct:
        writer.writerow(row)

with open('teste_csv.csv', 'r') as f:
    writer = csv.writer(open('result.csv','w'))
    file = csv.reader(f)
    for line in file:
        message = ''.join(line)
        toto(message,writer)

答案 1 :(得分:0)

您需要将编写器置于第一个循环之外。每次循环抛出时,它都会打开并重写文件

您要定义的另一个问题是在循环内调用toto,以便使用最后一个消息值调用它。

import re
import csv
import string

with open('test.csv', 'r') as f:
    file = csv.reader(f)
    writer = csv.writer(open('result.csv', 'w'))
    def toto(message):

        message = message.lower()
        p = re.compile('|'.join(map(re.escape, string.punctuation)))
        no_punct = p.sub(' ', message)
        for row in no_punct:
            writer.writerow(row)
            return writer     
    for line in file:
        print line
        message=''.join(line)

    print(toto(message))