我正在逐行遍历员工记录文件,并尝试在员工记录末尾插入一个新行(工作班次记录)到文件中,该记录标有“? ”
基本上我的文件看起来像这样:
工作人员#####!
乔史密斯员工
第一班轮第二班轮?¥!
。简·史密斯偶然的志愿者
第一班次第二班次第三班次<?> @
......我想,比如说,给Jane Smith的记录添加一个“第四班”。我想通过迭代文件的工作副本,找到jane的记录(使用标志)然后当前行的后继(line-&gt; next ??)是“?”来做到这一点。我知道我现在的路线是Jane最后记录的班次。然后,我可以在“第四班”行中写入,然后继续将旧文件的剩余部分复制到我的新文件中。
当我迭代所有这些行时,如何阅读跟随行(检查“?”)而不实际跳过它?
答案 0 :(得分:1)
无论如何,你基本上不能只在文件中间插入一行。相反,您应该使用包含新行的新文件覆盖旧文件。所以解决方案是这样的:
因此,对于您的示例,并使用您的标记想法来查找插入点,您将执行以下操作:
#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)
有更短的方法可以做到这一点,但这可能是最直接的。