我正在尝试在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
中答案 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))