python-3.x 遍历目录中的文件并仅提取特定字符串

g6ll5ycj  于 2023-06-25  发布在  Python
关注(0)|答案(2)|浏览(168)

我试图遍历一个目录中的一堆文本文件,并且在每个文本文件中只取出4行。
文件看起来像这样:

ip=1.1.1.1
port=80

idk=idk

idc=idc

uname=test

whoknows=whoknows

password=test

我只想要ip,端口,uname,和密码。我该如何从目录中的每个文件中提取出来?
到目前为止,我有这个,但它只是读取整个文件:

import os

path = "C:/Users/directory"

os.chdir(path)

def read_text_file(file_path):
    with open(file_path, 'r') as f:
        print(f.read())

for file in os.listdir():
    if file.endswith(".txt"):
        file_path = f"{path}\{file}"
        read_text_file(file_path)
8iwquhpp

8iwquhpp1#

如果确定文件格式,可以遍历文本中的行并搜索某个前缀,例如ip。如果行以ip开头,则返回该行=符号之后的部分。
代码示例:

text = """
ip=1.1.1.1
port=80

idk=idk

idc=idc

uname=test

whoknows=whoknows

password=test
"""

def get_field_value(text, field):
    for line in text.split("\n"):
        if line.startswith(field):
            return line.split("=")[-1]

print(get_field_value(text, "ip"))
print(get_field_value(text, "port"))
print(get_field_value(text, "uname"))
print(get_field_value(text, "password"))

输出:

1.1.1.1
80
test
test
ohfgkhjo

ohfgkhjo2#

使用regex可以轻松地提取必要的数据。首先逐行读取全文文件,然后调用下面的函数,字段名为文本作为参数:

def get_field_value(text, field):
    val = re.search(f"(?<={field}=).*", text)
    if val:
        return val[0]
    return ''

调用函数的示例:

print(get_field_value(text, "ip"))

相关问题