2017-10-06 10 views
0

私は、後で使用するために、値の間のスペースが多いテキストファイルからデータを配列にインポートするスクリプトに、一連のコードを入れました。CSVファイルをデータ配列にインポートするにはどうすればよいですか?

textfile = open('file.txt') 
data = [] 
for line in textfile: 
    row_data = line.strip("\n").split() 
    for i, item in enumerate(row_data): 
     try: 
      row_data[i] = float(item) 
     except ValueError: 
      pass 
    data.append(row_data) 

これをテキストファイルからcsvファイルに変更する必要があります。私はこのテキストをコンマで区切るように変更したくありません(引用符で囲まれている場合、いくつかの値にカンマを付けることができるので)。幸いにも、私はこれを処理できるCSVライブラリがあります。

import csv 
with open('file.csv', 'rb') as csvfile: 
    ??? 

どのようにデータアレイにcsvファイルをロードできますか?

それが違いをした場合、これはデータが使用される方法です。

row = 0 
for row_data in (data): 
    worksheet.write_row(row, 0, row_data) 
    row += 1 
+0

あなたは2つのタスクがあります:1)これをテキストファイルからCSVファイルに変更する必要があります。 2)データ配列にcsvファイルをロードするにはどうすればよいですか?最初の 'file.txt'コンテンツの投稿から始めてください – RomanPerekhrest

答えて

1

カンマで区切られ、Pythonの3にcsvモジュールを使用して最も簡単な方法は、おそらく次のようになります。Pythonの2、使用のために

import csv 

with open('testfile.csv', newline='') as csvfile: 
    data = list(csv.reader(csvfile)) 

print(data) 

ファイルを開くにはopen('testfile.csv', 'rb')を入力してください。

+0

ありがとうございます!私はPython 2を持っていますので、私はそれを修正しました。 'data ='行はcsv内の各行に対して繰り返されますか?データを 'worksheet.write_row(row、0、row_data)'行に直接置くことはできますか?まず配列に入れて配列の各行を読み込む必要はありませんか? – GFL

+0

はい、質問の最後のループがうまくいくようです(ただし、 'data'の周りにかっこは必要ありません)。 ['xlsxwriter.write_row()'](http://xlsxwriter.readthedocs.io/worksheet.html#worksheet-write-row)のドキュメントから、1回の呼び出しでより効率的に行うことができると思われます。つまり、 worksheet.write_row(row、0、data) 'を呼び出して、それぞれが1回ずつ行を繰り返す複数の呼び出しを行います。 – martineau

1

あなたはCSVファイルを読み込むためにパンダライブラリまたはnumpyのを使用することができます。あなたのファイルがタブで区切られている場合は、以下のsepとdelimiterの両方の引数にカンマの代わりに '\ t'を使用してください。

import pandas as pd 
myFile = pd.read_csv('filepath', sep=',') 

またはCSVファイルを想定し

import numpy as np 
myFile = np.genfromtxt('filepath,' delimiter=',') 
関連する問題