Jawaban:
Anda dapat mengonversi string ke objek file menggunakan io.StringIO
dan kemudian meneruskannya ke csv
modul:
from io import StringIO
import csv
scsv = """text,with,Polish,non-Latin,letters
1,2,3,4,5,6
a,b,c,d,e,f
gęś,zółty,wąż,idzie,wąską,dróżką,
"""
f = StringIO(scsv)
reader = csv.reader(f, delimiter=',')
for row in reader:
print('\t'.join(row))
versi lebih sederhana dengan split()
di baris baru:
reader = csv.reader(scsv.split('\n'), delimiter=',')
for row in reader:
print('\t'.join(row))
Atau Anda dapat dengan mudah split()
menggunakan string ini menjadi garis menggunakan \n
sebagai pemisah, dan kemudian split()
setiap baris menjadi nilai, tetapi dengan cara ini Anda harus sadar akan mengutip, jadi lebih baik menggunakan csv
modul.
Pada Python 2 Anda harus mengimpor StringIO
sebagai
from StringIO import StringIO
sebagai gantinya.
.split('\n')
, Anda bisa menggunakan .splitlines()
.
Sederhana - modul csv juga berfungsi dengan daftar:
>>> a=["1,2,3","4,5,6"] # or a = "1,2,3\n4,5,6".split('\n')
>>> import csv
>>> x = csv.reader(a)
>>> list(x)
[['1', '2', '3'], ['4', '5', '6']]
.split('\n')
akan melakukan hal-hal aneh jika bidang Anda berisi baris baru.
Doc resmi untuk csv.reader()
https://docs.python.org/2/library/csv.html sangat membantu, yang mengatakan
objek file dan objek daftar keduanya cocok
import csv
text = """1,2,3
a,b,c
d,e,f"""
lines = text.splitlines()
reader = csv.reader(lines, delimiter=',')
for row in reader:
print('\t'.join(row))
>>> a = "1,2"
>>> a
'1,2'
>>> b = a.split(",")
>>> b
['1', '2']
Untuk mem-parsing file CSV:
f = open(file.csv, "r")
lines = f.read().split("\n") # "\r\n" if needed
for line in lines:
if line != "": # add other needed checks to skip titles
cols = line.split(",")
print cols
3, "4,5,6, 6
harus diperlakukan sebagai tiga bidang, bukan lima.
Seperti yang telah ditunjukkan orang lain, Python menyertakan modul untuk membaca dan menulis file CSV. Ini bekerja cukup baik selama karakter input tetap dalam batas ASCII. Jika Anda ingin memproses penyandian lain, lebih banyak pekerjaan diperlukan.
The dokumentasi Python untuk modul csv alat perpanjangan csv.reader, yang menggunakan antarmuka yang sama tetapi dapat menangani pengkodean lainnya dan kembali unicode string. Cukup salin dan tempel kode dari dokumentasi. Setelah itu, Anda dapat memproses file CSV seperti ini:
with open("some.csv", "rb") as csvFile:
for row in UnicodeReader(csvFile, encoding="iso-8859-15"):
print row
'utf-8-sig'
sebagai codec sebagai ganti 'utf-8'
.
Per dokumentasi:
Dan sementara modul tidak secara langsung mendukung string parsing, itu dapat dengan mudah dilakukan:
import csv
for row in csv.reader(['one,two,three']):
print row
Ubah saja string Anda menjadi daftar elemen tunggal.
Mengimpor StringIO tampaknya sedikit berlebihan bagi saya ketika contoh ini secara eksplisit ada dalam dokumen.
https://docs.python.org/2/library/csv.html?highlight=csv#csv.reader
csvfile dapat berupa objek apa pun yang mendukung protokol iterator dan mengembalikan sebuah string setiap kali metode next () disebut
Jadi, a StringIO.StringIO()
, str.splitlines()
atau bahkan generator semuanya baik.
Inilah solusi alternatif:
>>> import pyexcel as pe
>>> text="""1,2,3
... a,b,c
... d,e,f"""
>>> s = pe.load_from_memory('csv', text)
>>> s
Sheet Name: csv
+---+---+---+
| 1 | 2 | 3 |
+---+---+---+
| a | b | c |
+---+---+---+
| d | e | f |
+---+---+---+
>>> s.to_array()
[[u'1', u'2', u'3'], [u'a', u'b', u'c'], [u'd', u'e', u'f']]
Berikut dokumentasinya
Panda adalah perpustakaan yang cukup kuat dan pintar membaca CSV dengan Python
Contoh sederhana di sini, saya punya file example.zip dengan empat file di dalamnya.
EXAMPLE.zip
-- example1.csv
-- example1.txt
-- example2.csv
-- example2.txt
from zipfile import ZipFile
import pandas as pd
filepath = 'EXAMPLE.zip'
file_prefix = filepath[:-4].lower()
zipfile = ZipFile(filepath)
target_file = ''.join([file_prefix, '/', file_prefix, 1 , '.csv'])
df = pd.read_csv(zipfile.open(target_file))
print(df.head()) # print first five row of csv
print(df[COL_NAME]) # fetch the col_name data
Setelah Anda memiliki data, Anda dapat memanipulasi untuk bermain dengan daftar atau format lain.