Herkes bir csv kodlanmış dize ayrıştırmak ve bir dizi veya sözlüğe dönüştürmek için basit bir kütüphane veya işlevi biliyor?
Ben yerleşik csv modülü istiyorum sanmıyorum çünkü gördüğüm tüm örneklerde dosya yolları alır, dizeleri değil.
Herkes bir csv kodlanmış dize ayrıştırmak ve bir dizi veya sözlüğe dönüştürmek için basit bir kütüphane veya işlevi biliyor?
Ben yerleşik csv modülü istiyorum sanmıyorum çünkü gördüğüm tüm örneklerde dosya yolları alır, dizeleri değil.
Yanıtlar:
Bir dizeyi kullanarak bir dosya nesnesine dönüştürebilir io.StringIO
ve daha sonra bunu csv
modüle iletebilirsiniz :
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))
split()
yeni satırlarda daha basit sürüm :
reader = csv.reader(scsv.split('\n'), delimiter=',')
for row in reader:
print('\t'.join(row))
Veya split()
bu dizeyi \n
ayırıcı olarak kullanarak satırlara , sonra da split()
her satırı değerlere dönüştürebilirsiniz, ancak bu şekilde alıntı yapmanın farkında olmalısınız, bu nedenle csv
modül kullanmak tercih edilir.
On Python 2 İçe zorunda StringIO
olduğu
from StringIO import StringIO
yerine.
.split('\n')
kullanabilirsiniz .splitlines()
.
Basit - csv modülü listelerle de çalışır:
>>> 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')
alanlarınız yeni satırlar içeriyorsa bunun garip şeyler yapacağını unutmayın .
csv.reader()
Https://docs.python.org/2/library/csv.html için resmi doküman çok yararlı, diyor ki
dosya nesneleri ve liste nesneleri hem uygundur
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']
Bir CSV dosyasını ayrıştırmak için:
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
beş yerine üç alan olarak ele alınacaktır.
Diğerlerinin de belirttiği gibi, Python CSV dosyalarını okumak ve yazmak için bir modül içerir. Giriş karakterleri ASCII sınırları içinde kaldığı sürece oldukça iyi çalışır. Diğer kodlamaları işlemek istiyorsanız, daha fazla çalışmaya ihtiyaç vardır.
Csv modülü için Python belgelerine aletlerin aynı arabirimi kullanır ama dizeleri unicode diğer kodlamaları ve döner işleyebilir csv.reader bir uzantısı. Kodu dokümandan kopyalayıp yapıştırmanız yeterlidir. Bundan sonra, böyle bir CSV dosyasını işleyebilirsiniz:
with open("some.csv", "rb") as csvFile:
for row in UnicodeReader(csvFile, encoding="iso-8859-15"):
print row
'utf-8-sig'
bunun yerine kodek olarak kullanın 'utf-8'
.
Başına belgeler:
Modül ayrıştırma dizelerini doğrudan desteklemese de, kolayca yapılabilir:
import csv
for row in csv.reader(['one,two,three']):
print row
Dizenizi tek bir öğe listesine dönüştürmeniz yeterlidir.
Bu örnek açıkça dokümanlar içindeyse, StringIO'yu içe aktarmak benim için biraz fazla görünüyor.
https://docs.python.org/2/library/csv.html?highlight=csv#csv.reader
csvfile, yineleyici protokolünü destekleyen ve next () yöntemi her çağrıldığında bir dize döndüren herhangi bir nesne olabilir
Bu nedenle, a StringIO.StringIO()
, str.splitlines()
hatta bir jeneratör bile iyidir.
İşte alternatif bir çözüm:
>>> 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']]
İşte belgeler
Panda Python CSV okumak oldukça güçlü ve akıllı bir kütüphane
Burada basit bir örnek, içinde dört dosya bulunan example.zip dosyası var.
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
Verilere sahip olduğunuzda, bir liste veya diğer formatlarla oynatmak için işlem yapabilirsiniz.