在python中读取CSV文件时保持引号

问题描述 投票:-1回答:2

麻烦的家庭作业很麻烦。我有一个csv文件,每行有很多逗号分隔的字段。我需要从每一行中获取最后两个字段,并将它们写入新的txt文件中。问题在于后面的某些字段有句子,带逗号的字段用双引号引起来,没有它们的字段则没有。例如:

180,简单

240分钟,“很简单,但是数字3,wtf?”

300,比上一次作业容易得多

我这样做,但效果很好,但是双引号消失了。分配是将字段复制到txt文件,使用分号作为分隔符并删除可能的换行符。文本必须保持完全相同。我们有一个自动检查系统,因此争论是否有意义没有用。

import csv
file = open('myfile.csv', 'r')
output= open('mytxt.txt', 'w')
csvr = csv.reader(file)
headline = next(csvr)
for line in csvr:
    lgt = len(line)
    time = line[lgt - 2].replace('\n', '')
    feedb = line[lgt - 1].replace('\n', '')
    if time != '' and feedb != '':
        output.write(time + ';' + feedb + '\n')
output.close()
file.close()

是否有一些简单的解决方案?我可以完全使用csv模块吗?似乎没有人遇到完全相同的问题。

谢谢大家。

python csv quotes
2个回答
0
投票
import csv file = open('myfile.csv', 'r') output= open('mytxt.txt', 'w') csvr = csv.reader(file) headline = next(csvr) for line in csvr: lgt = len(line) time = line[lgt - 2].replace('\n', '') feedb = line[lgt - 1].replace('\n', '') if time != '' and feedb != '': if ',' in feedb: output.write(time + ';"' + feedb + '"\n') else: output.write(time + ';' + feedb + '\n') output.close() file.close()

0
投票
file = open('myfile.csv','r') output = open('mytxt.txt', 'w') headline = file.readline() feedb_lst = [] count = 0 for line in file: if line.startswith('1'): #found out all lines should start with an ID number, data_lst = line.split(',', 16) #that always starts with '1' lgt = len(data_lst) time = data_lst[lgt - 2] feedb = data_lst[lgt - 1].rstrip() feedback = [time, feedb] feedb_lst.append(feedback) count += 1 else: feedb_lst[count - 1][1] = feedb_lst[count - 1][1] + line.rstrip() i = 1 for item in feedb_lst: if item[0] != '' and item[1] != '': if i == len(feedb_lst): output.write(item[0] + ';' + item[1]) else: output.write(item[0] + ';' + item[1] + '\n') i += 1 output.close() file.close()

谢谢您的帮助!

© www.soinside.com 2019 - 2024. All rights reserved.