2014-01-08 3 views
1

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

Так что я хочу, чтобы заменить

Name   City   State 
FOO BAR  los angeles  ca 
guy's naME PHILADELPHIA Pa 

С (обратите внимание на «)

Name   City   State 
Foo Bar  Los Angeles  CA 
Guy's Name Philadelpha  PA 
+0

И разве кто-то хочет сказать, что мне поставить на мой вопрос, для обеспечения надлежащего синтаксиса для таблицы? – Xodarap777

ответ

2

Это жестко закодировано в соответствии с вашим примером файла, но должно делать то, что вы хотите:

import csv 
import sys 
import string 

reader = csv.reader(sys.stdin, delimiter='\t') 
writer = csv.writer(sys.stdout, delimiter='\t') 

# write the header as-is 
writer.writerow(reader.next()) 

for row in reader: 
    row[0] = string.capwords(row[0]) 
    row[1] = string.capwords(row[1]) 
    row[2] = row[2].upper() 
    writer.writerow(row) 

Пример использования:

cat test.csv | python fix_case.csv 
Name City State 
Foo Bar Los Angeles CA 
Guy's Name Philadelphia PA 
+0

Идеально подходит для того, что я хотел. Мне просто нужно было понять, как применять строковые операции к dataframes/series, но я думаю, это так же просто, как и для строк. Для строки [0] - строка [0] .capwords() должна решить сразу несколько проблем, я ожидаю! – Xodarap777

+0

Я отредактировал свой ответ, чтобы использовать ключевые слова в соответствии с вашим предложением, которое устраняет проблему, которую я пропустил, где она заглавная буква 's' в имени Гая. Благодаря! –

0

Прежде всего, вам нужно узнать некоторые правила питона Затем вы должны установить IPython, и использовать его вместо python. Затем вам нужно запустить ipython и попробовать некоторые действительно основные проблемы.

Чтение CSV файл объекта DataFrame (Google, или учиться) Тогда, если вы хотите серии ЗАГЛАВНОЙ (штат):

s1 = pd.core.series.Series(['foo', 'bar']) 
s1 = s1.apply(lambda x: x.upper()) 
s1 

Тогда, если вы хотите, чтобы в нижнем регистре и капитализировать Series (Город)

s2 = pd.core.series.Series(['FOO', 'fOo']) 
s2 = s2.apply(lambda x: x.lower().capitalize()) 
s2 

Если вы хотите загладить каждое слово, вам нужно сделать это для Google.

И тогда вам нужно сохранить файл csv с новым измененным DataFrame.

+0

«Google или узнать» - это общий подход, который может применяться ко всем форумам, особенно форумам типа Q & A. Однако я, очевидно, здесь не просто так. «Голосование вниз требует 125 репутации». – Xodarap777

1

Это будет делать то, что вы хотите минус все заглавные состояния и случаи, как (Guys'S имя) со специальными символами:

with open("output.txt",'w') as O: 
    with open("input.txt") as I: 
     for line in I: 
      O.write(line.title()) 

Перед:

Name   City   State 
FOO BAR  los angeles  ca 
guy's naME PHILADELPHIA Pa 

После:

Name   City   State 
Foo Bar  Los Angeles  Ca 
Guy'S Name Philadelphia Pa 
Смежные вопросы