как написать одну строку ячейка за ячейкой и заполнить его в CSV-файл - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть файл CSV, в котором есть только заголовки столбцов:

 cat mycsv.csv
 col_1@@@col_2@@@col_3@@@col_3

Мне нужно заполнить одну строку значениями None в каждой ячейке файла CSV.Может кто-нибудь предложить мне лучший оптимизированный способ сделать это в Python и Pandas?

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

 cat mycsv.csv
 col_1 , col_2 , col_3 , col_3
 0@@@None@@@None@@@None

Как вставить индекс и разделительбудет @@@ вместо ,?Я получаю сообщение об ошибке:

tmp.to_csv(csvFile,sep='@@@',index=True) 
 , line 1381, in to_csv
formatter.save()
 3.6.1/linux_x86_64/lib/python3.6/site-packages/pandas/formats/format.py", line 1473, in save
self.writer = csv.writer(f, **writer_kwargs)
  TypeError: "delimiter" must be a 1-character string
Exception ignored in: <module 'threading' from Traceback (most recent call last):
File python-3.6.1/linux_x86_64/lib/python3.6/threading.py", line 1015, in 
_delete
del _active[get_ident()] 
KeyError: 140459817715712

Ответы [ 2 ]

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

То, что вы пытаетесь сделать, довольно нестандартно.Сначала прочитайте первую строку в качестве заголовка и разделите ее, используя разделитель @@@.Затем откройте выходной файл и напишите этот заголовок, используя , в качестве разделителя.Затем напишите свой row, используя разделитель @@@.Например:

row = [0, None, None, None]

with open('mycsv.csv') as f_input:
    header = next(f_input).strip().split('@@@')

with open('mycsv2.csv', 'w') as f_output:
    f_output.write(' , '.join(header) + '\n')
    f_output.write('@@@'.join(map(str, row)) + '\n')

Если mycsv.csv содержит:

col_1@@@col_2@@@col_3@@@col_3        

, тогда mycsv2.csv будет записано как:

col_1 , col_2 , col_3 , col_3
0@@@None@@@None@@@None
0 голосов
/ 25 сентября 2018

Это @ или ,?Если вы используете формальный CSV-файл, разделитель заголовка должен совпадать с содержимым.

Если вы имеете в виду ,, вы можете использовать что-то подобное.

import pandas as pd
# just for abrevation
tmp = pd.read_csv("mycsv.csv",sep=',')
tmp.loc[0,:] = "None"
tmp.to_csv("mycsv.csv",sep=',',index=False)

Если вы имеете в виду @, я советую вам не использовать панд.Просто используя просто IO способов.

tmp = open("mycsv.csv","r").read()
tmp = tmp + "\n" + "@@@".join(["None"] * len(tmp.split(',')))
with open("mycsv.csv","w") as f1:
    f1.write(tmp)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...