2017-07-27 13 views
0

TSVファイルのすべての行をリストに読み込もうとしています。しかし、TSVリーダーは早く終了し、ファイル全体を読まない。 dataはファイル全体の長さのわずか1/6なので、私はこれを知っています。この場合、エラーはスローされません。CSVはWindows上のPythonですべての行を読み上げません

私は手作業で行末を検査すると(長さはdataに相当しますが、これらの行には大量のUnicodeシンボルがあります)、UnicodeDecodeErrorを捕捉できると思っていましたが、エラーをスローするのではなく、

私は実際にループを起こしています。エラーは、Windows Server 2012でPython 2.7を使用している場合にのみ発生します。ファイルには、読み取り専用のファイルがあります。以下の両方のコードスニペットを使用して、Python 2.7のUnix実装に完全に100%。私はこれを両方のAnacondaの中で実行しています。

これは私が試したことです。どちらも機能しません:

data = [] 

with open('data.tsv','r') as infile: 
    csvreader = csv.reader((x.replace('\0', '') for x in infile), 
    delimiter='\t', quoting=csv.QUOTE_NONE) 

    data = list(csvreader) 

は、私も行ずつ読んでみました...

with open('data.tsv','r') as infile: 
for line in infile: 
    try: 
     d = line.split('\t') 
     q = d[0].decode('utf-8') #where the unicode symbols are located 
     data.append(d) 
    except UnicodeDecodeError: 
     continue 

感謝を事前に! the documentationからの一般的な提案を1として

答えて

1

たcsvfileがファイルオブジェクトである場合は、それはそれは違いをプラットフォームにフラグ「b」で開かれている必要があります。

そうであなたのファイルを開きます。

with open('data.csv', 'rb') as infile: 
    csvreader = csv.reader(infile, delimiter='\t', quoting=csv.QUOTE_NONE) 
    data = list(csvreader) 

また、あなたは彼らがUnicodeデータを持っている場合は、あなたの文字列をデコードする必要があります、またはあなたが持っていないので、ちょうどドロップイン置換としてunicodecsvを使用それを心配する。

+0

ブリリアント。 Unixが何度も私を怠け者にしてくれるので、私は 'r'対 'rb'を完全に忘れていました。フラグを切り替えると、ファイル全体が読み取られました。どうもありがとうございます! – Stevie

関連する問題