2

我是来自 R 世界的 Python 新手,我正在处理以数据列结构化的大文本文件(这是 LiDaR 数据,因此通常有 6000 万+条记录)。

是否可以更改如此大文件的字段分隔符(例如,从制表符分隔到逗号分隔)而无需读取文件并for在行上执行循环?

4

4 回答 4

6

不。

  • 读入文件
  • 更改每行的分隔符
  • 写回每一行

只需几行 Python 就可以轻松做到这一点(未经测试,但一般方法有效):

# Python - it's so readable, the code basically just writes itself ;-)
#
with open('infile') as infile:
  with open('outfile', 'w') as outfile:
    for line in infile:
      fields = line.split('\t')
      outfile.write(','.join(fields))

我不熟悉 R,但如果它有一个库函数,它可能会做同样的事情。

请注意,此代码一次只从文件中读取一行,因此文件可能大于物理 RAM - 它永远不会完全加载。

于 2011-05-18T06:33:37.313 回答
1

您可以使用linux tr 命令将任何字符替换为任何其他字符。

于 2011-12-12T16:17:29.487 回答
1

实际上可以说是的,你可以在没有循环的情况下做到这一点,例如:

with open('in') as infile:
  with open('out', 'w') as outfile:
      map(lambda line: outfile.write(','.join(line.split('\n'))), infile)
于 2018-04-06T10:21:09.127 回答
0

你不能,但我强烈建议你检查发电机。

关键是您可以制作更快且结构良好的程序,而无需在内存中写入和存储数据以进行处理。

例如

file = open("bigfile","w")
j = (i.split("\t") for i in file)
s = (","join(i) for i in j)
#and now magic happens
for i in s:
     some_other_file.write(i)

此代码花费内存来保存单行。

于 2011-05-18T06:56:10.560 回答