-5

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

所以基本上我的文件看起来像这样:

职员 ##### !
Joe Smith
员工
第一班
第二班


Jane Smith
临时志愿者

第一班
第二班
第三班
?
@

......我想,比如说,在简·史密斯的记录中添加一个“第四班”。我想通过迭代文件的工作副本,找到简的记录(使用标志)然后当当前行的后继(行->下一个??)是“?” 我知道我当前的线路是 Jane 最后记录的班次。然后,我可以在继续将旧文件的其余部分复制到新文件中之前写入“第四班”行。

当我遍历所有这些行时,如何阅读以下行(以检查“?”)而不实际跳过它?

4

1 回答 1

1

无论如何,您基本上不能只在文件中间插入一行。相反,您应该使用包含新行的新文件覆盖旧文件。所以解决方案是这样的:

  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)

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

于 2012-09-01T21:04:17.290 回答