Сохранение кавычек при чтении файла CSV в python - PullRequest
0 голосов
/ 22 марта 2020

Truoble с действительно раздражающей домашней работой. У меня есть CSV-файл с большим количеством полей, разделенных запятыми в каждой строке. Мне нужно взять последние два поля из каждой строки и записать их в новый текстовый файл. Проблема в том, что в некоторых из последних полей есть предложения, те, у которых запятые, заключены в двойные кавычки, а без них - нет. Например:

180, легкий

240мин, «Довольно просто, но номер 3, wtf?»

300, намного проще, чем последнее назначение

Я сделал это, и все работало нормально, но двойные кавычки исчезают. Назначение - скопировать поля в txt-файл, использовать точку с запятой в качестве разделителя и удалить возможные разрывы строк. Текст должен оставаться точно таким же. У нас есть автоматическая c система проверки, поэтому бесполезно спорить, имеет ли это смысл.

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? Похоже, что никто не сталкивался с такой же проблемой.

Заранее всем спасибо.

Ответы [ 2 ]

0 голосов
/ 22 марта 2020

Пришлось сделать это безобразно, файл был слишком иррациональным. Разговаривали с некоторыми коллегами по тому же курсу, и, очевидно, идея заключалась не в том, чтобы использовать здесь модуль csv, а в том, чтобы репетировать основную обработку файлов c в 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()

Спасибо за помощь!

0 голосов
/ 22 марта 2020

Попробуйте,

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