Bất cứ ai cũng biết về một thư viện hoặc hàm đơn giản để phân tích chuỗi mã hóa csv và biến nó thành một mảng hoặc từ điển?
Tôi không nghĩ rằng tôi muốn mô-đun csv tích hợp bởi vì trong tất cả các ví dụ tôi đã thấy có các filepath, không phải chuỗi.
Bất cứ ai cũng biết về một thư viện hoặc hàm đơn giản để phân tích chuỗi mã hóa csv và biến nó thành một mảng hoặc từ điển?
Tôi không nghĩ rằng tôi muốn mô-đun csv tích hợp bởi vì trong tất cả các ví dụ tôi đã thấy có các filepath, không phải chuỗi.
Câu trả lời:
Bạn có thể chuyển đổi một chuỗi thành một đối tượng tệp bằng cách sử dụng io.StringIOvà sau đó chuyển chuỗi đó sang csvmô-đun:
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))
phiên bản đơn giản hơn với split()dòng mới:
reader = csv.reader(scsv.split('\n'), delimiter=',')
for row in reader:
print('\t'.join(row))
Hoặc bạn có thể chỉ đơn giản là split()chuỗi này thành các dòng bằng cách sử dụng \ndấu phân cách, sau đó split()mỗi dòng thành các giá trị, nhưng theo cách này bạn phải biết trích dẫn, vì vậy sử dụng csvmô-đun được ưu tiên.
Trên Python 2, bạn phải nhập StringIOdưới dạng
from StringIO import StringIO
thay thế.
.split('\n'), bạn có thể sử dụng .splitlines().
Đơn giản - mô-đun csv cũng hoạt động với các danh sách:
>>> 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')sẽ làm những điều kỳ lạ nếu các lĩnh vực của bạn có dòng mới.
Tài liệu chính thức cho csv.reader() https://docs.python.org/2/l Library / csv.html là rất hữu ích, nói rằng
đối tượng tập tin và đối tượng danh sách đều phù hợp
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']
Để phân tích tệp 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, 6sẽ được coi là ba trường thay vì năm.
Như những người khác đã chỉ ra, Python bao gồm một mô-đun để đọc và ghi các tệp CSV. Nó hoạt động khá tốt miễn là các ký tự đầu vào nằm trong giới hạn ASCII. Trong trường hợp bạn muốn xử lý các bảng mã khác, cần nhiều công việc hơn.
Các tài liệu Python cho các mô-đun csv cụ một phần mở rộng của csv.reader, trong đó sử dụng giao diện tương tự nhưng có thể xử lý mã hóa và lợi nhuận khác unicode chuỗi. Chỉ cần sao chép và dán mã từ tài liệu. Sau đó, bạn có thể xử lý tệp CSV như thế này:
with open("some.csv", "rb") as csvFile:
for row in UnicodeReader(csvFile, encoding="iso-8859-15"):
print row
'utf-8-sig'làm codec thay vì 'utf-8'.
Theo tài liệu:
Và trong khi mô-đun không hỗ trợ trực tiếp các chuỗi phân tích cú pháp, nó có thể dễ dàng được thực hiện:
import csv
for row in csv.reader(['one,two,three']):
print row
Chỉ cần biến chuỗi của bạn thành một danh sách thành phần duy nhất.
Nhập StringIO có vẻ hơi quá đối với tôi khi ví dụ này rõ ràng trong các tài liệu.
https://docs.python.org/2/l Library / csv.html? highlight = csv # csv.reader
csvfile có thể là bất kỳ đối tượng nào hỗ trợ giao thức iterator và trả về một chuỗi mỗi khi phương thức next () của nó được gọi
Vì vậy, một StringIO.StringIO(), str.splitlines()hoặc thậm chí một máy phát điện đều tốt.
Đây là một giải pháp thay thế:
>>> 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']]
Đây là tài liệu
Panda là thư viện khá mạnh mẽ và thông minh đọc CSV bằng Python
Một ví dụ đơn giản ở đây, tôi có tệp example.zip có bốn tệp trong đó.
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
Khi bạn có dữ liệu, bạn có thể thao tác để chơi với một danh sách hoặc các định dạng khác.