在python中从第二个文件中的文件搜索字符串

2024-09-28 05:28:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做python的第一步,我有一个问题。我想打开两个文件,一个是4kB,第二个是11MB。第一个(较小)文件如下所示:

ABCDE
FGDTR
DTRDG
DRTYJ
ARTYF

第二个更像:

 33.492513889    9.217400000  ABCDE YYYY XX 2118994
 16.000000000  -30.000000000  CJSIA YYYY XX 2115145
 17.000000000  -30.000000000  OALXM YYYY XX 2115145
 18.000000000  -30.000000000  DRTYJ YYYY XX 2115145

如你们所见,第一个值是坐标,第一个值是纬度,第二个值是经度。我想在第二个文件中查找第一个文件中的字符串,并以以下格式创建包含所有结果的文件(名为e.x.done.txt):

XXXXX;LATITUDE;LONGITUDE;

其中XXXXX是文件1中的字符串

谢谢你的建议


Tags: 文件字符串格式xxxxxxx纬度经度yyyy
3条回答

只需稍加格式化,就可以使用Pandas轻松实现该功能

第二个文件应正确格式化为CSV。我接受了您的输入,并将其格式化如下,其中包含一些标题字段,如下所示:

Latitute    Longitude   Indicator   someColumn1 someColumn2 someInteger
33.492513889    9.217400000 ABCDE   YYYY    XX  2118994
16.000000000    -30.000000000   CJSIA   YYYY    XX  2115145
17.000000000    -30.000000000   OALXM   YYYY    XX  2115145
18.000000000    -30.000000000   DRTYJ   YYYY    XX  2115145

注意:我正在使用\t->;制表符作为分隔符

程序本身非常简单:

import pandas as pd

toSearch= []
with open('firstFile.txt', 'r') as fd:
    toSearch= fd.read().split('\n')

df = pd.read_csv('secondFile.txt', delimiter='\t')

df[df['Indicator'].isin(inputs)][['Indicator', 'Latitute', 'Longitude']].to_csv('output.txt', index=False)

如果你不想使用熊猫,我们仍然可以通过逐行搜索字符串来实现

toSearch= []
with open('firstFile.txt', 'r') as fd:
    toSearch= fd.read().split('\n')
with open('secondFile.txt', 'r') as fd, open('output.txt', 'w') as fout:
    while fd:
        line = fd.readline()
        if not line:
            break
        line_words =  line.split('\t')
        if line_words[2] in toSearch:
                   fout.write({}\t{}\t{}\n".format(line_words[2],line_words[0],line_words[1]))

        

你也可以试试这个

open("file_name.extantion",'mode')打开第一个和第二个文件,然后读取数据

first_obj = open('first.txt','r')
second_obj = open('second.txt','r')

first_obj.close()
second_obj.close()

f_file = first_obj.read().split('\n')
s_file = second_obj.read().split('\n')

然后,您可以在一行s_文件中检查要匹配的每个f_文件字符串

for string in f_file:
    for line in s_file:
        if string in line:
            lat_long = ' '.join(line.split()[0:2])
            final = open('done.txt','a+')
            final.write(string+' '+lat_long+'\n')
            final.close()

不要忘记在操作后安全地关闭文件,或者您也可以使用with语句

python中的文件对象基本上是一个生成器。您可以使用for循环打开它并逐行迭代

with open('file.txt', 'r') as f:
    for line in f:
        print(line)

对于您的问题,我的方法是将第一个文件中的所有单词存储到set中。(用于更快的会员操作)

打开第二个文件并从中读取每一行。拆分行并从行中提取strings,然后检查它是否在set中。如果是,则第一个文件具有该字符串,您可以将其以所需格式写入输出文件

我不想为你写代码,你应该自己写。但这将是我的方法

作为旁注,您可以使用with打开多个文件

with open('file1.txt', 'r') as file1, open('done.txt', 'w') as output:
    pass

相关问题 更多 >

    热门问题