从大CSV中删除逗号(1GB)

时间:2012-07-31 15:53:14

标签: python matlab csv comma

我有一个大型CSV文件(1GB),我想从中删除逗号。数据都是正整数。我尝试过的方法包括带空格作为分隔符的dlmwrite,但输出则以十进制格式输出。我也试过使用fprintf命令,但后来我失去了矩阵的形状(即所有数据都出现在一行或一列中)。

因此,

是否有一种从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 个答案:

答案 0 :(得分:10)

在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))

答案 1 :(得分:1)

就个人而言,我喜欢使用sed,一个替换字符串的命令行程序。

此应用程序可在Linux上获得,也可通过windows中的cygwin安装获得。

使用

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

文件中的所有逗号都替换为空格。

答案 2 :(得分: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中你可以用空格替换,然后再写入磁盘

答案 3 :(得分:0)

python有一个用于CSV文件i / o的csv模块。

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');

但此代码存在问题。首先,您在一个大块中读取文件,而不是行换行:您可能会耗尽内存。第二个csvread总是返回一个double数组,因此在读取大整数时可能会丢失精度。最后,如果input.txt具有可变数量的列,则矩阵M将为零填充。

强烈推荐使用python解决方案!