2016-09-26 4 views
-1

これは2つの質問の組み合わせです - オンラインテキストファイルを読み、その結果をリストに解析します。私はあなたができる、どちらかと言うと、URLからすべての行を解析し、CSVファイルの特定の行に入れて試みるよりも、リストにオンラインカンマ区切りのテキストファイルをPython 3.5で解析する

import urllib 
CFTC_URL = r"http://www.cftc.gov/dea/newcot/FinFutWk.txt" 
CFTC_url = urllib.request.urlopen(CFTC_URL) 
output = CFTC_url.read().decode('utf-8') 
+0

可能な重複(http://stackoverflow.com/questions/172439/how-do-i-split-a-multi-line-string-into-multiple-lines) – SiHa

答えて

2

:[?どうすれば複数行に複数行の文字列を分割しない]の

import requests, io, csv 

CFTC_URL = r"http://www.cftc.gov/dea/newcot/FinFutWk.txt" 
data = io.StringIO(requests.get(CFTC_URL).text) 

dialect = csv.Sniffer().sniff(data.read(1024)) 
data.seek(0) 
reader = csv.reader(data, dialect) 
for row in reader: 
    print(row) 
0

を変換することができバイトのファイルにファイルを読み込むことはできませんが、次のコードを、試してみましたすべてをテキストファイルにプッシュして整形してから読み返してみるともう少しうまくいくように見えるかもしれませんが、これはURLからコンマで区切られた情報への私のアプローチです。

import requests 
URL = "http://www.cftc.gov/dea/newcot/FinFutWk.txt" 
r = requests.get(URL,stream=True) 
with open('file.txt','w') as W: 
    W.write(r.text) 
with open('file.txt', 'r') as f: 
    lines = f.readlines() 

for line in lines: 
    print(line.split(',')) 

あなたはforloopにあるもの取る、とあなたが使用ではなく、それらを印刷することができますので、実際にリストの配列にリストを保存するために周りにそれを交換することができます。

content = [] 
for line in lines: 
    content.append(line.split(',')) 

はまた、分割時に、あなたはまだそれの後にホワイトスペースのかなり大きい量を持っているコンテンツがあることがわかります、あなたは、アレイ内の各リストについては、リスト全体を介して実行、および削除ができることに注意してくださいすべての空白がリスト内の最初の要素を破棄したり、空白を持つ数値を実際の整数に変換して文字列として読み込んだりするだけです。それがあなたの好みです。ご不明な点がございましたら、下記のコメントをお寄せください。

EDIT 1: メモ:コンテンツとともに保存されたファイルを保持しない場合は、osライブラリをインポートして、行を行配列に読み込んだ後にファイルを削除します。

import os 
os.remove('file.txt') 
0

あなたが最初splitを使用して行を取得したいテーブルとしてファイルを解釈したいと仮定。次に、各行を再び分割して列を取得することができます。

import urllib.request 
CFTC_URL = r"http://www.cftc.gov/dea/newcot/FinFutWk.txt" 
CFTC_url = urllib.request.urlopen(CFTC_URL) 
output = CFTC_url.read().decode('utf-8') 
lines = output.split("\r\n"))) # split on newline 
print(lines[0]) # first line "CANADIAN DOLLAR ..." 
columns_0 = lines[0].split(",") # split on , 
print(columns[0]) # first column of first line 

これで、行のリストを繰り返し、行の各エントリに対して列を反復処理できます。

あなたは、ファイルの内容について StringIOラッパー(データを取得するための requestsライブラリとの一例)とスタンダール csvモジュールを使用することができます
関連する問題