如何使用python从txt文件中读取特定数据

时间:2016-10-27 10:02:45

标签: python python-2.7

帮帮我,我有一个data.txt文件。我想读取该文件112652447744中的特定数据,它是目录C中的自由空间数据。 这是我的data.txt文件的内容:

  Caption  FreeSpace     Size          
   C:      112652447744  146776518656  
   D:      295803727872  299962986496  
   E:                                   
   Z:                                   

3 个答案:

答案 0 :(得分:1)

您可以读取每一行(忽略第一行)并用空格分隔以获取每一列。这样您就可以为每个分区提取大小和可用空间:

contents = # here go the file contents
# split the text file into lines and ignore the first line
lines = contents.splitlines()[1:]
part_data = {}
for line in lines:
    columns = line.split()  # split the lines along the white space characters
    if len(columns) != 3:
        continue  # incomplete lines
    part_data[columns[0]] = (columns[1], columns[2])

这将为字典中的每个分区提供可用空间和大小。为了得到你的实际结果,它将是:

part_data['C:'][0]

如果您只想要第二列和第二行,忽略驱动器号,则可以将其减少到以下位置:

contents = # here go the file contents
second_line = contents.splitlines()[1]
second_column = second_line.split()[1]

你去了,但这需要它始终格式相同。如果第二行没有三列,则它实际上不起作用并且最有可能导致IndexError

请注意a_string.split()会自动删除所有空格,而a_string.split(' ')也会返回其中的空格。

答案 1 :(得分:1)

试试这个:

#Open file in lines
file = open('path/to/txt','r').readlines()
#For each line
for disk in file:
    fields = disk.split("\t")
    #To check the total fields...
    if(len(fields)>1):

        print fields[1]

答案 2 :(得分:1)

你的问题并没有这么说,但是我可以假设你想在Caption为C的行中“查找”代表FreeSpace的值:?

除非您需要文件中的数据用于其他内容,否则只需逐行读取文件,直到获得结果为止。第一行将是您的标题行,您可以使用'caption_header'和'fs_header'的位置来解析每个后续数据行。

在您的示例中,这意味着我们要测试每行的第一个值是否包含C:,如果是,我们要查找的答案将在第二列中。如果我们找到答案,则无需搜索其余行。

def find_value(caption_header, fs_header, caption_value, fp):
    fs = None
    with open(fp) as fid:
        headers = fid.readline().strip().split()
        for i, h in enumerate(headers):
            if h == caption_header:
                caption_position = i
            if h == fs_header:
                fs_position = i
        line = fid.readline()
        while line != '':
            values = line.strip().split()
            if values[caption_position] == caption_value:
                fs = values[fs_position]
                break
    return fs

然后像这样使用它:

fs = find_value('Caption', 'FreeSpace', 'C:')