尽管seek(0),file.readlines()返回一个空列表

时间:2019-03-28 15:18:18

标签: python python-3.x

我正在尝试逐行读取一个已经存在的文件。我已经检查了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

相反,它提供[]作为输出。

2 个答案:

答案 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)