我有一个大型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
答案 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
将为零填充。