現在、Excelで開いたときに合計5列のCSVファイルがあります。私にとって重要なのは列AとCだけで、残りの列のデータは無関係です。
8行目から開始し、7の倍数(つまり、8、15、22、29、36など)で作業し、Python 2.7で辞書を作成しようとしています。これらのフィールドからの情報。列Aのデータがキー(6桁の整数)になり、列Cのデータがキーのそれぞれの値になります。これを以下で強調表示しようとしましたが、フォーマットは異なります最高の:-
A B C D
1 CDCDCDCD
2 VDDBDDB
3
4
5
6
7 DDEFEEF FEFEFEFE
8 123456 JONES
9
10
11
12
13
14
15 293849 SMITH
上記のように、辞書のキーとしてA7(DDEFEEF)から値を抽出し、それぞれのデータである「FEFEFEFE」を検索してから、辞書に別のエントリを追加します。キーと「スミス」はそれぞれの値です。
助言がありますか?ソースファイルは、エントリがタブ区切りの.txtファイルです。ありがとう
明確化:
明確にするために、これまでのところ、私は以下を試しました:-
import csv
mydict = {:}
f = open("myfile", 'rt')
reader = csv.reader(f)
for row in reader:
print row
上記は、一度に1行ずつすべてのコンテンツを出力します。 「for row(7)in reader」を試しましたが、これはエラーを返しました。その後、私はそれを調査し、以下で試してみましたが、どちらも機能しませんでした:
import csv
from itertools import islice
entries = csv.reader(open("myfile", 'rb'))
mydict = {'key' : 'value'}
for i in xrange(6):
mydict['i(0)] = 'I(2) # integers representing columns
range = islice(entries,6)
for entry in range:
mydict[entries(0) = entries(2)] # integers representing columns
テキストをリストのリストに変えることから始めます。これにより、解析部分が処理されます。
lol = list(csv.reader(open('text.txt', 'rb'), delimiter='\t'))
残りは、インデックス付きルックアップで実行できます。
d = dict()
key = lol[6][0] # cell A7
value = lol[6][3] # cell D7
d[key] = value # add the entry to the dictionary
...
提示されている他のソリューションには何も問題はありませんが、Pythonの優れたライブラリパンダを使用することで、ソリューションを簡素化し、大幅にエスカレートできます。
Pandasは、多くのデータサイエンティストが好むPythonでデータを処理するためのライブラリです。
Pandasには、ファイルの読み取りと解析を行うための単純化されたCSVインターフェイスがあります。これを使用して、それぞれがファイルの1行を含む辞書のリストを返すことができます。キーは列名になり、値は各セルの値になります。
あなたの場合:
import pandas
def create_dictionary(filename):
my_data = pandas.DataFrame.from_csv(filename, sep='\t', index_col=False)
# Here you can delete the dataframe collumns you dont want!
del my_data['B']
del my_data['D']
# ...
# Now you transform the DataFrame to a list of dictionaries
list_of_dicts = [item for item in my_data.T.to_dict().values()]
return list_of_dicts
# Usage:
x = create_dictionary("myfile.csv")
ファイルが大きい場合、一度に完全にメモリにロードしたくない場合があります。このアプローチはそれを回避します。 (もちろん、それから辞書を作成すると、RAMを占有する可能性がありますが、元のファイルよりも小さいことが保証されています。)
my_dict = {}
for i, line in enumerate(file):
if (i - 8) % 7:
continue
k, v = line.split("\t")[:3:2]
my_dict[k] = v
編集:以前からextend
をどこで手に入れたかわからない。私はupdate
を意味しました