3

私はプログラミングに不慣れで、コースワークのいくつかで理解できない問題に遭遇しました。次の内容の「example.csv」という架空のファイルについて考えてみます。

Key1,Value1
Key2,Value2
Key3,Value3
...

次のコードを実行すると、ファイル内のすべての行が出力され、最後の行に1つのアスタリスクが続きます。アスタリスクで区切られた各行を印刷することを期待していました。

infile = open("example.csv", "r")
for line in infile:
    print line.strip()
    print '*'
    #row_elements = line.split(",")
    #print row_elements

さらに、上記のコードのハッシュを削除して各コンマで行を分割しようとすると、次の出力が得られます。

['Key1', 'Value1\rKey2', 'Value2\rKey3'...

代わりに「\r」を.split()メソッドに渡すことにより、出力がわずかに改善されます。

['Key1,Value1', 'Key2,Value2'...

そもそもPythonがファイル全体がすべて1行にあると考える理由はまだわかりません。誰かがこれについて洞察を持っていますか?

4

3 に答える 3

7

ファイルは\r行区切り文字として使用されています(「CR」または「ClassicMac」の改行規則とも呼ばれます)。Pythonopenはデフォルトではこれを処理しません。

「ユニバーサルニューライン」モード(の'rU'モードopen)を使用して、ファイルを正しく開くことができます。

(一部のMacテキストエディタはまだ\rラインターミネータとして使用していることに注意してください。ただし、これらは数年前よりも今ではあまり一般的ではありません。)

于 2013-03-07T02:10:17.947 に答える
3

入力ファイルの形式が正しくありません。Linuxでは、行は。で区切られ'\n'ます。Windowsでは、行は。で区切られ'\r\n'ますが、ランタイムライブラリのコードによって'\r'消えます。

ファイルでは、行はで区切られています。これは、最新のオペレーティングシステム'\r'では標準ではありませんおそらく、ファイルを作成したプログラムに何らかの欠陥があります。

于 2013-03-07T01:47:19.077 に答える
1

csvを扱っている場合は、csvモジュールを使用する必要があります。これにより、csv入力/出力の処理に関連するほとんどのがらくたが処理されます。

import csv
with open("example.csv", "rb") as infile:
    reader = csv.reader(infile)
    for row in reader:
        print row # a list of items in your file

ステートメントブロックから脱退すると、withステートメントヒアリングによってファイルが自動的に閉じられます。

于 2013-03-07T02:37:22.537 に答える