我正在尝试逐行读取一个已经存在的文件。我已经检查了Stackoverflow上提到添加<file>.seek(0)
的各种选项。这会将代码指向文件的开头。我在代码中也添加了此功能,但仍然返回一个空列表。任何帮助将不胜感激。
谢谢!
尝试了seek(0)
,但是它不起作用。
#!/usr/bin/env python
import subprocess
class ListDirectories:
def trash_listing(self):
hdfs_listing_file = open('abc.txt', 'w+')
subprocess.Popen("hdfs dfs -du -s -h /user/*/.Trash", stdout=hdfs_listing_file, shell=True)
hdfs_listing_file.close()
tl = ListDirectories()
tl.trash_listing()
class DirectoryFiltering:
def file_filtering(self):
with open('abc.txt', 'r') as myfile:
myfile.seek(0)
lines = myfile.readlines()
print(myfile)
print(lines)
df = DirectoryFiltering()
df.file_filtering()
我希望它会提供类似以下的输出:
0 0 /user/abc/.Trash
24 M 72 M /user/def/.Trash
相反,它提供[]
作为输出。
答案 0 :(得分:0)
在等待读取程序之前,您不必等待程序产生文件输出或退出。
将输出生成到文件的函数应该跟踪该进程,以便可以在其上等待或在其上等待。那就是等待调用可能会延迟到需要读取文件之前。
关闭打开的文件后,以下等待。当然可以在这里使用with open() as
。
class ListDirectories:
def trash_listing(self):
hdfs_listing_file = open('abc.txt', 'w+')
p = subprocess.Popen("hdfs dfs -du -s -h /user/*/.Trash", stdout=hdfs_listing_file, shell=True)
hdfs_listing_file.close()
p.wait()
答案 1 :(得分:0)
尝试一下:
def file_filtering(self):
with open('abc.txt', 'r') as myfile:
lines = myfile.readlines()
print(myfile)