Python - чтение содержимого CSV в Python и добавление его - PullRequest
0 голосов
/ 25 сентября 2018
 import csv
 with open("somecities.csv") as f:
    reader = csv.DictReader(f)
    data = [r for r in reader]

Содержимое somecities.csv:

Country,Capital,CountryPop,AreaSqKm

Canada,Ottawa,35151728,9984670

USA,Washington DC,323127513,9833520

Japan,Tokyo,126740000,377972

Luxembourg,Luxembourg City,576249,2586

Впервые на python, и я пытаюсь прочитать и добавить файл csv.Я провел некоторое время, экспериментируя с некоторыми ответами на подобные вопросы, но не повезло - поэтому я считаю, что приведенный выше код довольно бесполезен.

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

И оттуда я пытаюсьдобавьте еще три города в CSV (Страна, Столица, CountryPop, AreaSqKm) и просмотрите обновленный CSV.Как мне все это делать?

Желаемые дополнения к обновленному csv:

Бразилия, Бразилиа, 211224219, 8358140

Китай, Пекин, 1403500365, 9388211

Бельгия, Брюссель, 11250000, 30528

РЕДАКТИРОВАТЬ:

Import csv
with open("somecities.csv", "r") as csvinput:
    with open(" somecities_update.csv", "w") as csvresult:
        writer = csv.writer(csvresult, lineterminator='\n')
        reader = csv.reader(csvinput)
        all = []
        headers = next(reader)
        for row in reader:
            all.append(row)

        # Now we write to the new file
        writer.write(headers)
        for record in all:
            writer.write(record)


        #row.append(Brazil, Brasília, 211224219, 8358140)
        #row.append(China, Beijing, 1403500365, 9388211)
        #row.append(Belgium, Brussels, 11250000, 30528)

Ответы [ 3 ]

0 голосов
/ 25 сентября 2018

Итак, предположив, что вы можете использовать панд для этого, я бы поступил следующим образом:

import pandas as pd   

df1 = pd.read_csv('your_initial_file.csv', index_col='Country')
df2 = pd.read_csv('your_second_file.csv', index_col='Country')

dfs = [df1,df2]

final_df = pd.concat(dfs)
0 голосов
/ 25 сентября 2018

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

import csv
with open("somecities.csv", "r") as csvinput:
    with open("result.csv", "w") as csvresult:
        writer = csv.writer(csvresult, lineterminator='\n')
        reader = csv.reader(csvinput)
        all = []
        row = next(reader)
        row.append(Brazil, Brasília, 211224219, 8358140)
        row.append(China, Beijing, 1403500365, 9388211)
        all.append(row)
        for row in reader:
            row.append(row[0])
            all.append(row)
        writer.writerows(all)

Простейшая форма, которую я вижу, протестированная в python 3.6

Открытие файла с параметром 'a' позволяет добавить его в конец файла вместо простой перезаписи существующего содержимого.Попробуйте это.

>>> with open("somecities.csv", "a") as fd:
...     fd.write("Brazil, Brasília, 211224219, 8358140")

ИЛИ

#!/usr/bin/python3.6
import csv
fields=['Brazil', 'Brasília', '211224219','8358140']
with open(r'somecities.csv', 'a') as f:
    writer = csv.writer(f)
    writer.writerow(fields)
0 голосов
/ 25 сентября 2018

DictReader будет представлять каждую строку только как словарь, например:

{
  "Country": "Canada",
  ...,
  "AreaSqKm": "9984670"
}

Если вы хотите сохранить весь CSV как словарь, вам придется создать свой собственный:

import csv

all_data = {}

with open("somecities.csv", "r") as f:
    reader = csv.DictReader(f)
    for row in reader:
        # Key = country, values = tuple containing the rest of the data.
        all_data[row["Country"]] = (row["Capital"], row["CountryPop"], row["AreaSqKm"])

# Add the new cities to the dictionary here...

# To write the data to a new CSV
with open("newcities.csv", "w") as f:
    writer = csv.writer(f)
    for key, values in all_data.items():
        writer.writerow([key] + list(values))

Как уже говорили другие, библиотека pandas может быть хорошим выбором.Проверьте его read_csv и to_csv функции.

...