在大文本文件中打印出特定信息

时间:2019-06-06 14:55:31

标签: python

我想读入并解析大型文本文件(超过900,000行),但是我只想在整个文件中输出一组特定的行。我有正在寻找的关键字和数字,但是为了简化问题,我只在寻找这些特定的单词。.“批次ID”,“晶片ID”,“ Chip X Coord”和“ Chip Y Coord”

我有一个字符串,其中包含我需要的所有内容。我只是不确定如何与大型文本文件进行比较。我尝试了if语句,但不确定下一步该怎么做。我又是一个初学者。

my_list = ['Lot ID', 'Wafer ID', 'Chip X Coord', 'Chip Y Coord']
array = []
correct = False 

with open("HP.txt", "r") as lines:

for line in lines:
   line = line.strip('\n') 
   line = line.strip('\t')  
   line = line.strip() 
   line = line.replace(" ", "") 
   array.append(line)   

if 'Lot ID' in line:
   correct = True  

if 'Wafer ID' in line:
   correct = True

if 'Chip X Coord' in line:
   correct = True 

if 'Chip Y Coord' in line:
   correct = True 

   print(array)


f.close()

我希望每次在文件中显示这些特定单词时输出一个列表。

1 个答案:

答案 0 :(得分:1)

我假设您想将匹配的行写到我创造性地命名为output_lines.txt的输出文件中。

请注意列表理解,以确定文件中的行是否包含任何关键字。

[item for item in my_list if(item in line)]

这将遍历关键字列表中的值,并检查文本行是否包含该关键字。这样,您可以在列表中添加/删除关键字,而无需更改代码。

我还删除了删除空格的行,因为您所有的关键字都有空格。

这将通过并仅打印包含您的关键字的行

my_list = ['Lot ID', 'Wafer ID', 'Chip X Coord', 'Chip Y Coord']

with open("HP.txt", "r") as lines:
    with open("output_lines.txt","w+") as out_file:
        for line in lines:
            line = line.strip('\n') 
            line = line.strip('\t')  
            line = line.strip() 
            is_in_list = any(item for item in my_list if(item in line)) 

            if is_in_list:
                print(line)
                out_file.write(line)
                out_file.write('\n')

这将根据上下文提取并打印。它对输入文件做了一些强有力的假设。 -每四行将包含您要查找的四个项目 -所有四个项目都将计入每个块中

我的测试输入如下:

Lot ID=Q19176
Wafer ID=564
Chip X Coord=84834
Chip Y Coord=64738
Lot ID=Q19176
Wafer ID=987
Chip X Coord=3565
Chip Y Coord=35635
Lot ID=Q19176
Wafer ID=2343
Chip X Coord=2344
Chip Y Coord=6565

下面的代码给出输出:

Q19176_564_84834_64738
Q19176_987_3565_35635
Q19176_2343_2344_6565

它将使用与位置相关的不同项目的值填充列表-意味着批次ID始终是位置0,晶圆ID总是位置1 ...

with open("HP.txt", "r") as lines:
    with open("output_lines_context.txt","w+") as out_file:
        data_list = [None for i in range(4)]
        for line in lines:
            line = line.strip('\n') 
            line = line.strip('\t')  
            line = line.strip() 
            items = line.split('=')
            if len(items) > 1:
                if 'Lot ID' in line:
                    data_list[0] = items[1]
                elif 'Wafer ID' in line:
                    data_list[1] = items[1]
                elif 'Chip X Coord' in line:
                    data_list[2] = items[1]
                elif 'Chip Y Coord' in line:
                    data_list[3] = items[1]
            has_none = any(i is None for i in data_list)
            if not has_none:
                print('_'.join(data_list))
                out_file.write('_'.join(data_list))
                out_file.write('\n')
                data_list = [None for i in range(4)]