Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 删除/重新排列/添加非常大的tsv文件_Python_Tsv - Fatal编程技术网

Python 删除/重新排列/添加非常大的tsv文件

Python 删除/重新排列/添加非常大的tsv文件,python,tsv,Python,Tsv,我有一个非常大的tsv文件(1.2GB,5列,38m行)。我想删除一列,添加一列ID(1到38m),然后重新排列列顺序。我如何在不使用大量内存的情况下做到这一点 选择的语言是Python,尽管它对其他解决方案开放。您可以一次读取、操作和写入一行。如果不将整个文件加载到内存中,这将具有非常低的内存签名 import csv with open(fileinpath, 'rb') as fin, open(fileoutpath, 'wb') as fout: freader = csv.r

我有一个非常大的tsv文件(1.2GB,5列,38m行)。我想删除一列,添加一列ID(1到38m),然后重新排列列顺序。我如何在不使用大量内存的情况下做到这一点


选择的语言是Python,尽管它对其他解决方案开放。

您可以一次读取、操作和写入一行。如果不将整个文件加载到内存中,这将具有非常低的内存签名

import csv
with open(fileinpath, 'rb') as fin, open(fileoutpath, 'wb') as fout:
    freader = csv.reader(fin, delimiter = '\t')
    fwriter = csv.writer(fout, delimiter = '\t')
    idx = 1
    for line in freader:
        line[4], line[0] = line[0], line[4] #switches position between first and last column
        del line[3] #delete fourth column
        line.insert(0, idx)
        fwriter.writerow(line)
        idx += 1
(这是用python2.7编写的,删除了示例的第四列)


关于重新排列顺序-我假设是列的顺序-这可以在操纵部分完成。这里有一个切换第一列和最后一列顺序的示例。

您可以一次读取、操作和写入一行。如果不将整个文件加载到内存中,这将具有非常低的内存签名

import csv
with open(fileinpath, 'rb') as fin, open(fileoutpath, 'wb') as fout:
    freader = csv.reader(fin, delimiter = '\t')
    fwriter = csv.writer(fout, delimiter = '\t')
    idx = 1
    for line in freader:
        line[4], line[0] = line[0], line[4] #switches position between first and last column
        del line[3] #delete fourth column
        line.insert(0, idx)
        fwriter.writerow(line)
        idx += 1
(这是用python2.7编写的,删除了示例的第四列)


关于重新排列顺序-我假设是列的顺序-这可以在操纵部分完成。这里有一个切换第一列和最后一列顺序的示例。

您可以使用
awk
来执行此操作,我不会说1.2GB将占用大量内存

如果要删除c3

awk -F"\t" 'BEGIN{OFS="\t"}{print $1,$2,$4,$5,NR}' input.txt > output.txt
原始输出为 c1 c2 c4 c5柱状ID(1到38m)

$1是column1,$2是column2,依此类推。NR是行数


如果您想重新排列,只需更改$1、$2、$4、$5和NR的顺序,

您可以使用
awk
来执行此操作,我不会说1.2GB将占用大量内存

如果要删除c3

awk -F"\t" 'BEGIN{OFS="\t"}{print $1,$2,$4,$5,NR}' input.txt > output.txt
原始输出为 c1 c2 c4 c5柱状ID(1到38m)

$1是column1,$2是column2,依此类推。NR是行数


如果要重新排列,只需更改$1、$2、$4、$5和NR的顺序,

答案在很大程度上取决于重写行和确定新顺序需要多少上下文

如果可以重写单独的行而不考虑上下文(取决于ID号是如何派生的),那么您可以使用
csv
模块逐行读取文件,如@Tal Kremerman所示,并按相同的顺序逐行写入。如果此时可以确定行的正确顺序,则可以添加一个额外字段,指示它们应出现的新顺序


然后,您可以进行第二次操作,将行排序/重新排列为正确的顺序。最近有很多关于“如何使用Python对大型文件进行排序”的帖子,例如,我认为Tal Kremerman是对的,OP只想重新排列列,而不是行

答案在很大程度上取决于重写行和确定新顺序需要多少上下文

如果可以重写单独的行而不考虑上下文(取决于ID号是如何派生的),那么您可以使用
csv
模块逐行读取文件,如@Tal Kremerman所示,并按相同的顺序逐行写入。如果此时可以确定行的正确顺序,则可以添加一个额外字段,指示它们应出现的新顺序


然后,您可以进行第二次操作,将行排序/重新排列为正确的顺序。最近有很多关于“如何用Python对大型文件进行排序”的帖子,例如,我认为Tal Kremerman是对的,OP只想重新排列列,而不是行

是否应该有一个“\t”而不是“,”?是否应该有一个“\t”而不是“,”?嗯。我读这篇文章时,他好像想重新排列列,不是行。如果是这样,那么您的解决方案涵盖了所有内容:)。我想这里的OP需要更明确。我读这篇文章时,好像他想重新排列列,而不是行。如果是这样,那么您的解决方案涵盖了所有内容:)。我想OP在这里需要更明确。这是您希望重新排列的行或列的顺序吗?这是您希望重新排列的行或列的顺序吗?