我将如何编写一个功能来搜索文本文件,返回这些详细信息,然后从文件中删除它们?

问题描述 投票:-1回答:1

This is the text file containing the details我受命创建一个函数,该函数根据输入的名称来更新详细信息文件。因此,该功能应该接收关键字并将其与详细信息进行比较,并提取具有该特定名称的详细信息然后将详细信息放在一个单独的文件中。到目前为止,这是我想出的,但是它没有按预期工作,因此,如果有人可以提供更好的解决方案,将不胜感激。

我的代码:

checkedOut = open('checked_out.txt','w+')
Details = open('Details.txt','r+')

l = []
dum = []
l2 = []
for i in Details:
    x = i.split()
    l.append(x)

count = 0
for t in l:
    for p in t:
        print(p)
        if p != key:
            print("Not in records")
        elif p == key:
            dum = l[count:count+9]
            print(dum)
    count+=1
python-3.x
1个回答
0
投票
这应该可以解决问题。首先读取整个Details文件,然后使用readlines()函数将其拆分为几行。

然后,您可以遍历行,每当细节长10行时,每次将计数器增加10(您也可以基于line_num分隔符更改======计数)。如果line_num计数指向等于Name: inputted_name的行,我们可以将这些行写入checkedOut文件并将其从详细信息行列表中删除,否则将line_num递增10并循环再次。

NB:检出的文件以append模式打开。

一旦读取完文件的末尾,请关闭checkedOut文件并用删除了复制数据的新行覆盖Details文件。

name = "sam" # or use input("Please give a name: ") checkedOutFileName = 'checked_out.txt' detailsFileName = 'Details.txt' # Open checked out file in append mode checkedOut = open(checkedOutFileName,'a') # Open details file in read mode Details = open(detailsFileName,'r') # Read all lines of Details as a list of lines DetailsLines = Details.readlines() # Close the Details file Details.close() line_num = 0 end_line = len(DetailsLines) while line_num < end_line: line = DetailsLines[line_num] # Check if line is equal to "Name: " + the given name if line.strip() == f"Name: {name}": # write matching details to checkedOut file checkedOut.writelines(DetailsLines[line_num:line_num+10]) print(*DetailsLines[line_num:line_num+10]) # Remove details from details lines del DetailsLines[line_num:line_num+10] # Reduce end_line by 10 lines end_line -= 10 # Continue without incrementing line count, as we've just removed the lines continue line_num += 10 checkedOut.close() # Overwrite Details file with modified data Details = open(detailsFileName,'w') Details.writelines(DetailsLines) # Add a new line at the end Details.write("") Details.close()

© www.soinside.com 2019 - 2024. All rights reserved.