我正在执行配置单元查询并将输出存储在本地FS中的tsv文件中。我正在为hive查询运行for循环并传递不同的参数。如果hive查询在for循环中没有返回一次输出,则在tsv文件中打印一个空行。这会导致NULL值被推送到后端的DB。因此,在for循环运行并创建文件后 - 我有以下代码删除所有打印的空行,但它不起作用。
如何从此文件中删除空行?
` 395.9 429.61 PT
`
代码:
with open('file.tsv','r+w') as file:
for line in file:
if line.strip():
file.write(line)
感谢
答案 0 :(得分: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)