使用Python去除Hive查询输出中的空行

-1 投票
1 回答
595 浏览
提问于 2025-04-18 09:37

我正在执行一个Hive查询,并把结果存储在本地文件系统的一个tsv文件中。我在一个循环里运行这个Hive查询,并传递不同的参数。如果在这个循环中,Hive查询没有返回任何结果,它就会在tsv文件中打印一个空行。这导致我的数据库在后台插入了NULL值。因此,在循环结束后,文件创建完成后,我有下面的代码想要去掉所有打印的空行,但它没有效果。

我该如何从这个文件中删除空行呢?

` 395.9   429.61  PT  
                       `

代码:

with open('file.tsv','r+w') as file:
        for line in file:
          if line.strip():
            file.write(line)

谢谢

1 个回答

0

通常,你会打开一个输入文件,然后把里面不为空的行写到第二个文件里:

with open('file.tsv') as infile, open('filtered_file.tsv', 'w') as outfile:
    for line in infile:
        if line.strip():
            outfile.write(line)

如果你想直接在原文件上进行过滤,可以使用 FileInputinplace 选项:

import fileinput
for line in fileinput.FileInput("infile", inplace=1):
    if line.strip():
        print line

不过,这种方法会使用一个中间文件,如果你的磁盘空间不够,可能就不太好用了。

为了在不占用额外磁盘空间的情况下直接过滤原文件,你可以试试下面这种方法:

with open('file.tsv', 'r+') as infile:
    read_pos = write_pos = 0
    line = infile.readline()
    while line:
        read_pos += len(line)
        if line.strip():
            infile.seek(write_pos)
            infile.write(line)
            write_pos += len(line)
        infile.seek(read_pos)
        line = infile.readline()
    # update file size to the new, possibly reduced, size
    infile.truncate(write_pos)

撰写回答