2009-10-20 6 views
4

CSV 파일을 읽으려고하는데 작동하지 않습니다. 내 CSV 파일을 읽을 수 있지만 읽은 내용을 볼 때 값 사이에 공백이 있는지 확인합니다.파이썬으로 csv 파일을 읽는 방법

는 여기 테이블과 같은 객체에 데이터를 저장하는 청소 데이터 구조입니다 NumPy와의 recarray를 생성하기 때문에 내가, 표준 CSV 라이브러리보다는 NumPy와의 genfromtxt를 사용하는 것을 선호 내 코드

# -*- coding: iso-8859-1 -*- 
import sql_db, tmpl_macros, os 
import security, form, common 

import csv 

class windows_dialect(csv.Dialect): 
    """Describe the usual properties of unix-generated CSV files.""" 
    delimiter = ',' 
    quotechar = '"' 
    doublequote = 1 
    skipinitialspace = 0 
    lineterminator = 'n' 
    quoting = csv.QUOTE_MINIMAL 


def reco(d): 
cars = {210:'"', 211:'"', 213:"'", 136:'à', 143:'è', 142:'é'} 
for c in cars: 
    d = d.replace(chr(c),cars[c]) 
return d 

def page_process(ctx): 
if ctx.req_equals('catalog_send'): 
    if 'catalog_file' in ctx.locals.__dict__: 
    contenu = ctx.locals.catalog_file[0].file.read() 
    #contenu.encode('') 
    p = csv.reader(contenu, delimiter=',') 
    inserted = 0 
    modified = 0 
    (cr,db) = sql_db.cursor_get() 
    for line in p: 
    if line: 
    logfile = open('/tmp/test.log', 'a') 
    logfile.write(line[0]) 
    logfile.write('\n') 
    logfile.write('-----------------------------\n') 
    logfile.close() 
+0

'유닉스에서 생성 된 CSV 파일'에 +1 (Excel이 * 유일한 * 방법이 아님을 나타냄) – pavium

+0

들여 쓰기가 일치하지 않습니다. – SilentGhost

+1

"값 사이의 공백"은 무엇을 의미합니까? 파일에 공백이 있습니까? 'csv' 파일에서 얻은 값은 그들 주위에 공백을 가지고 있습니까? 라인 터미네이터가 잘못되었습니다. '\ n '이 아니라'\ n'이어야합니다. –

답변

7

입니다.

>>> from numpy import genfromtxt 
>>> data = genfromtxt(csvfile, delimiter=',', dtype=None) 
# data is a table-like structure (a numpy recarray) in which you can access columns and rows easily 
>>> data['firstcolumn'] 
<content of the first column> 

편집 :이 답변은 꽤 오래되었습니다. numpy.genfromtxt하지만, 요즘 대부분의 사람들은 팬더를 사용합니다 :

>>> import pandas as pd 
>>> pd.read_csv(csvfile) 

이 데이터 분석을위한 더 나은 구조 pandas.DataFrame를 생성하는 장점이있다.

+0

genofromtxt -> genfromtxt – Tshepang

+0

고마워요! – dalloliogm

+0

'genfromtxt()'에서'names = True'를 사용하여'data [ 'firstcolumn']'가 작동하지 않게 만드시겠습니까? –

0

정의한 방언으로는 아무 것도하지 않습니다. 당신은이 일을 찾으 셨나요? 또한

csv.register_dialect('windows_dialect', windows_dialect) 
p = csv.reader(contenu, dialect='windows_dialect') 

reco 함수가 무엇인지 확실하지합니다. 당신이 데이터를 제어 할 경우

2

를 사용하는 대신 탭으로 구분 ::

import csv 
import string 

writer = open('junk.txt', 'wb') 
for x in range(10): 
    writer.write('\t'.join(string.letters[:5])) 
    writer.write('\r\n') 
writer.close() 
reader = csv.reader(open('junk.txt', 'r'), dialect='excel-tab') 
for line in reader: 
    print line 

이는 결과를 예상 생성합니다.

유용한 피드백을 얻으려면 유용한 정보 : 불필요한 중요하지 않은 결과물이 포함되어 있지 않은 자체 포함되고 완전한 예제 코드를 통해 문제를 설명하십시오.

관련 문제