从文件中读取行并在 Python 中的最后一个分隔符处拆分行并将其保存到另一个文件

Read lines from file and split line on last delimiter in Python and save it to another file

我有一个名为 data.txt 的文件,其中包含用冒号分隔的姓名、邮件和地址。它看起来像这样:

first_name1:last_name1:mail1@mail.com:address1
first_name2:last_name2:mail2@mail.com:address2
first_name3:last_name3:mail3@mail.com:address3
first_name4:last_name5:mail4@mail.com:address4
first_name5:last_name6:mail5@mail.com:address5
first_name6:last_name7:mail6@mail.com:address6
first_name7:last_name8:mail7@mail.com:address7

我只想读取地址并将其存储在名为 addresses.txt 的单独文件中(一行一个地址)。我试过这样的代码:

#name of file to store addresses
file_save = open("adresses.txt", 'a')

with open('data.txt', 'r') as file_to_open:
    data = file_to_open.read().rsplit(":",1)

    file_save.write(data[-1])

    print(data) #for testing only

file_to_open.close()

但它给了我这样的结果:

['first_name1:last_name1:mail1:address1\nfirst_name2:last_name2:mail2:address2\nfirst_name3:last_name3:mail3:address3\nfirst_name4:last_name5:mail4:address4\nfirst_name5:last_name6:mail5:address5\nfirst_name6:last_name7:mail6:address6\nfirst_name7:last_name8:mail7', 'address7']

我做错了什么?

我试着做成这样:

address1
address2
address3
...

请帮忙

使用csv和理解:

import csv 
with open('data.txt') as rf, open('address.txt', 'w') as wf:
    wf.writelines(a[-1] + '\n' for a in csv.reader(rf, delimiter=':'))

或没有csv:

with open('data.txt') as rf, open('address.txt', 'w') as wf:
    wf.writelines(a.split(':')[-1] for a in rf)
data = file_to_open.readlines()

for line in data:
    print(line.split(':')[-1])
file_save = open("adresses.txt", 'a')

with open('data.txt', 'r') as file_to_open:
    data = file_to_open.read().split("\n")  # first split into lines
    addresses = []  # initialize address list
    for line in data:
        address = line.split(":")[-1]  # get last element splitted by ":"
        addresses.append(address)  # save to addresses
    file_save.write("\n".join(addresses))  # one new line between each entry

file_save.close()  # this needs to be file_save not file_to_open

您可以尝试在 data

的每一行上使用 split 方法
file_save = open("adresses.txt", 'a')

with open('data.txt', 'r') as file_to_open:
    data = file_to_open.readlines();
    for address in data:
        file_save.write(address.split(":")[-1])

file_to_open.close()

我可以帮你。

我的 datas.txt 文件:

first_name1:last_name1:mail1@mail.com:address1
first_name2:last_name2:mail2@mail.com:address2
first_name3:last_name3:mail3@mail.com:address3
first_name4:last_name5:mail4@mail.com:address4
first_name5:last_name6:mail5@mail.com:address5
first_name6:last_name7:mail6@mail.com:address6
first_name7:last_name8:mail7@mail.com:address7

我的代码:

# My datas file
filename = 'datas.txt'

# A function for parse the lines
def get_lines():
    with open(filename, 'r', encoding='utf-8') as f:
        lines = f.readlines()
    return lines

def parse_and_extract():
    lines = get_lines()
    # First, we should open the result file.
    with open('result.txt', 'w', encoding='utf-8') as file:

        # Parse the lines and get the addresses
        for line in lines:
            # Get the address
            address = line.split(':')[-1]

            # Finally write the address to result file
            file.write(address)

parse_and_extract()

最后,我的 result.txt 文件:

address1
address2
address3
address4
address5
address6
address7

希望能帮到你