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

2024-09-28 20:59:17 发布

您现在位置:Python中文网/ 问答频道 /正文

真讨厌的家庭作业。我有一个csv文件,每行有许多逗号分隔的字段。我需要从每一行提取最后两个字段,并将它们写入一个新的txt文件。问题是后面的一些字段有句子,带逗号的字段用双引号括起来,没有逗号的字段不用双引号括起来。例如:

180,easy

240min,"Quite easy, but number 3, wtf?"

300,much easier than the last assignment

我这样做了,效果很好,但是双引号消失了。分配是将字段复制到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模块吗?似乎没有人有完全相同的问题

事先谢谢大家


Tags: 文件csvtxtoutputtimeeasylineopen
2条回答

试试这个

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

不得不用丑陋的方式,文件太不合理了。在同一课程中与一些同事交谈,显然这里的想法不是使用csv模块,而是用Python预演基本的文件处理

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

谢谢你的帮助

相关问题 更多 >