Кавычки появляются с одними строками, а не с другими. Как я могу сделать все строки одинаковыми? - PullRequest
0 голосов
/ 30 октября 2018

Я читаю в файле csv в словарь, преобразовываю данные по мере необходимости и записываю их в новый файл csv.

Исходный файл csv содержит столбец, в котором некоторые строки (слова) заключены в двойные кавычки, а другие строки не заключены в кавычки.

Как это:

FOODS;CALS
"PIZZA";600
"PIZZA";600
"BURGERS";500
"PIZZA";600
PASTA;400
"PIZZA";600
SALAD;100
CHICKEN WINGS;300
"PIZZA";600
"PIZZA";600

После того, как я запишу этот столбец в мой выходной файл, он будет выглядеть как массив ниже, где слова из исходного CSV, которые были в кавычках, теперь имеют три кавычки, а другие нет:

FAVORITE_FOOD;VOTES
"""PIZZA""";6
"""BURGERS""";1
PASTA;1
SALAD;1
CHICKEN WINGS;1

Мне нужно удалить кавычки, чтобы мой последний CSV выглядел так:

FAVORITE_FOOD;VOTES
PIZZA;6
BURGERS;1
PASTA;1
SALAD;1
CHICKEN WINGS;1

Вот как я читаю в файле:

with open(input_data_txt, "r") as file:
    # This enables skipping the header line.
    skipped = islice(file, 1, None)
    for i, line in enumerate(skipped, 2):

        try:
            food, cals = line.split(';')
        except ValueError:
            pass

А вот как я это пишу:

with open(food_txt, 'w') as myfile:
    wr = csv.writer(myfile, delimiter=';')
    for i in final_array:
        wr.writerow(i)

Ответы [ 3 ]

0 голосов
/ 30 октября 2018

Использование replace:

file = open(r"PY.csv")
text = file.read()
text = text.split()
for i in range(len(text)):
    text[i] = text[i].replace('"',"")

Чем у вас будет такой список:

PIZZA
PIZZA
BURGERS
PIZZA
PASTA
PIZZA
SALAD
CHICKEN WINGS
PIZZA
PIZZA
0 голосов
/ 30 октября 2018

Вы можете использовать csv.DictReader, чтобы вы могли обращаться к столбцам по имени, от collections.Counter до считать номер каждого вхождения пищи, а затем использовать csv.writer, чтобы вывести их соответственно, например, :

import csv
from collections import Counter

with open('input_file') as fin, open('output_file', 'wb') as fout:
    # Count occurrences of each FOODS type
    votes = Counter(row['FOODS'] for row in csv.DictReader(fin, delimiter=';'))
    # Create a csv.writer around the output file and write the header columns
    csvout = csv.writer(fout, delimiter=';')
    csvout.writerow(['FAVORITE_FOOD', 'VOTES'])
    # Write the name and vote counts to the file
    csvout.writerows(votes.items())
0 голосов
/ 30 октября 2018

Тройные кавычки, вероятно, добавляются модулем csv для экранирования существующих кавычек.

Так что вместо чего-то вроде:

csvwriter.writeline(food, vote)

Попробуйте что-то вроде:

csvwriter.writeline(food.strip('"'), vote)
...