回答:
を使用して文字列をファイルオブジェクトに変換しio.StringIO
、それをcsv
モジュールに渡すことができます。
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()
改行付きのシンプルなバージョン:
reader = csv.reader(scsv.split('\n'), delimiter=',')
for row in reader:
print('\t'.join(row))
または、split()
この文字列を\n
セパレータとして使用して行に単純化し、split()
各行を値に変換することもできますが、この方法では引用符に注意する必要があるため、csv
モジュールを使用することをお勧めします。
上のPython 2インポートする必要がありますStringIO
ように
from StringIO import StringIO
代わりに。
.split('\n')
、を使用できます.splitlines()
。
シンプル-csvモジュールはリストでも動作します:
>>> 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')
便利ですが、フィールドに改行が含まれている場合は、奇妙なことが行われることに注意してください。
csv.reader()
https://docs.python.org/2/library/csv.htmlの公式ドキュメント は非常に役立ちます。
ファイルオブジェクトとリストオブジェクトの両方が適しています
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']
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
、5つのフィールドではなく3つのフィールドとして扱われます。
他の人がすでに指摘したように、PythonにはCSVファイルを読み書きするためのモジュールが含まれています。入力文字がASCIIの制限内にある限り、うまく機能します。他のエンコーディングを処理する場合は、さらに作業が必要です。
csvモジュールのPythonドキュメントは、 csv.readerの拡張機能を実装します。これは、同じインターフェイスを使用しますが、他のエンコーディングを処理し、Unicode文字列を返すことができます。ドキュメントからコードをコピーして貼り付けるだけです。その後、次のようにCSVファイルを処理できます。
with open("some.csv", "rb") as csvFile:
for row in UnicodeReader(csvFile, encoding="iso-8859-15"):
print row
'utf-8-sig'
代わりにコーデックとして使用し'utf-8'
ます。
https://docs.python.org/2/library/csv.html?highlight=csv#csv.reader
csvfileは、イテレータプロトコルをサポートし、next()メソッドが呼び出されるたびに文字列を返す任意のオブジェクトにすることができます
このように、StringIO.StringIO()
、str.splitlines()
またはにも発電機がすべて良いです。
これが代替ソリューションです:
>>> 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']]
ここにドキュメントがあります
パンダはPythonでCSVを読み取る非常に強力でスマートなライブラリです
ここでの簡単な例では、4つのファイルが含まれるexample.zipファイルがあります。
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
データを取得したら、リストやその他の形式で操作することができます。