8

コンマを削除したい大きな CSV ファイル (1GB) があります。データはすべて正の整数です。私が試した方法には、区切り文字としてスペースを含む dlmwrite が含まれていますが、出力は 10 進数形式で出力されます。fprintf コマンドも使用しようとしましたが、行列の形状が失われます (つまり、すべてのデータが 1 行または 1 列に表示されます)。

したがって、

CSV (input.txt) から読み込む簡単な方法はありますか?

1, 2, 3, 4, 5
2, 3, 4, 5, 6

次に、次の形式でテキスト ファイル (output.txt) に出力します。

1 2 3 4 5
2 3 4 5 6
4

4 に答える 4

11

Python では、フォーマットが非常に単純な場合 (各コンマの後に既にスペースがある場合):

with open("infile.csv") as infile, open("outfile.csv", "w") as outfile:
    for line in infile:
        outfile.write(line.replace(",", ""))

空白について確信が持てない場合:

import re
with open("infile.csv") as infile, open("outfile.csv", "w") as outfile:
    for line in infile:
        outfile.write(re.sub(r"\s*,\s*", " ", line))
于 2012-07-31T16:21:03.897 に答える
1

個人的には、文字列を置き換えるコマンド ライン プログラムである sed を使用するのが好きです。

このアプリケーションは Linux で利用でき、Windows にも cygwin をインストールして利用できます。

使用する

sed -i 's/,/ /g' filename

ファイル内のすべてのコンマはスペースに置き換えられます。

于 2012-08-06T14:09:14.317 に答える
0

次のように、ファイル記述子から fgetl を使用して行ごとに読み取ることができます。

fid=fopen('file.csv');
if (fid==-1)
    return
end
sl=fgetl(fid);        
while (~feof(fid))
    sl=fgetl(fid);  
    icol=find(sl==',');
end  

fclose(fid);

sl では、, をスペースに置き換えて、ディスクに再度書き込むことができます

于 2012-07-31T16:02:27.240 に答える
0

python にはcsvCSV ファイルの i/o 用のモジュールがあります。

import csv
with open("input.txt") as infile:
    with open("output.txt", "w") as outfile:
        for line in csv.reader(infile):
            outfile.write(' '.join(line)+'\n')

同様に、matlab には csvread 関数があります

M = csvread('input.txt');
dlmwrite('output.txt', M, 'delimiter', ' ', 'precision', '%ld');

しかし、このコードには問題があります。最初に、行ごとではなく、単一の大きなチャンクでファイルを読み取ります。メモリが不足する可能性があります。Secondcsvreadは常にdouble配列を返すため、大きな整数を読み取ると精度が失われる可能性があります。最後input.txtに、可変数の列がある場合、行列Mはゼロで埋められます。

python ソリューションを強くお勧めします!

于 2012-08-01T08:44:12.487 に答える