使用Python去除Hive查询输出中的空行
我正在执行一个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)
如果你想直接在原文件上进行过滤,可以使用 FileInput
和 inplace
选项:
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)