如何在Python中获得line>next

2024-05-15 20:23:16 发布

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

我正在逐行遍历一个雇员记录文件,并试图在一个雇员记录的末尾插入一个新行(工作班次的记录),该文件用“?”标记。在

所以基本上我的文件是这样的:

Staff ##### !
Joe Smith
Employee
first shift
second shift
?
!
Jane Smith
Occassional volunteer

first shift
second shift
third shift
?
@

……我想,比方说,给简·史密斯的记录加上一个“第四班”。我想通过迭代文件的工作副本,找到jane的记录(使用标志),然后当当前行的后续行(行->下一行??)时执行此操作是“?”我知道我现在的台词是简的最后一次记录。然后,在继续将旧文件的其余部分复制到新文件之前,我可以在“第四次移位”行中写入内容。在

当我迭代所有这些行时,如何读取下面的行(以检查“?”)而不是直接跳过去?在


Tags: 文件标记shift记录employeefirstsmithstaff
1条回答
网友
1楼 · 发布于 2024-05-15 20:23:16

总之,你基本上不能在文件的中间插入一行。相反,应该用包含新行的新文件覆盖旧文件。所以解决方案是这样的:

  1. 打开文件进行读取。在
  2. 保存文件的内容,最好是逐行保存,以便于在特定行插入。在
  3. 在保存的内容中插入新行。在
  4. 重新打开文件,这次是以写入模式,并用保存的修改内容覆盖其内容。在

因此,对于您的示例,使用您的标志思想来查找插入点,您可以执行以下操作:

#Step 1
with open('testFile', 'r') as f:
    #Step 2
    contentList = f.readlines()

#Step 3
isJane = False # <  flag
i = 0
insertIndex = None # used to avoid changing the list while looping over it
for line in contentList:
    if 'jane' in line.lower():
        isJane = True
    if isJane and line.strip() == '?':
        insertIndex = i
    i += 1
contentList.insert(insertIndex, 'fourth shift\n')

#Step 4
with open('testFile', 'w') as f:
    f.writelines(contentList)

有一些较短的方法可以做到这一点,但这可能是最直接的方法。在

相关问题 更多 >