编写一个对txt文件中的行进行编号的函数,跳过空白行并将输出写入另一个文件
Posted
技术标签:
【中文标题】编写一个对txt文件中的行进行编号的函数,跳过空白行并将输出写入另一个文件【英文标题】:Writing a function that numbers lines in a txt file skipping blank lines and writing the output to another file 【发布时间】:2021-11-13 06:31:58 【问题描述】:正如标题所说,我需要创建一个函数来读取文件并为该文件中的行编号,跳过空白行,然后将该输出写入另一个文件。这是我到目前为止所拥有的,但我很新,所以我不确定我在做什么。
def num_lines(inputfilename, outputfilename):
f = open(inputfilename, 'r')
lines = f.split("\n")
num_lines = list()
for line in lines:
if line == " ":
num_lines.append(str(len(num_lines))+ " " + line + "\n")
fout = open(outputfilename, 'w')
fout.write(str("\n".join(num_lines)))
fout.close()
还有其他一些单元格检查您的工作,但我收到错误消息 AttributeError: '_io.TextIOWrapper' 对象没有属性 'split'
【问题讨论】:
【参考方案1】:问题是您正在打开文件但没有读取它,因此您实际上没有将文件拆分为所需部分的对象。你可以通过像这样添加一个额外的变量来解决这个问题:
g = f.read()
打开文件后添加,然后更改
lines = f.split("\n")
到
lines = g.split("\n")
【讨论】:
【参考方案2】:@pynoob 首先尝试使用 with.open() 而不是常规打开。当您忘记关闭文件时,它将使您的代码更加容易,并且会减少错误,因为它会为您处理所有这些。其次,当您使用 open() 打开文件时,它是一个尚未读取数据的对象,因此您需要先从中获取数据才能使用它。然后你也可以使用 f-strings 之类的东西让它变得又好又简单!
def num_lines(inputfilename, outputfilename):
page_num = 1
with open(inputfilename, 'r') as in_file:
lines = in_file.readlines()
for line in lines:
if line != '\n':
with open(outputfilename, 'a+') as out_file:
out_file.write(f'page_num. line.replace("/n","")')
page_num +=1
【讨论】:
hmm 这仍然给我断言单元格中的错误 ---> 19 assert_equal(line[0], '0') # 检查行中的第一个单词。 'a+' 应该做什么? @pynoob 你能给我你的完整追溯吗?和 a+ 用于读取和附加文件。如果文件不存在,它将创建它。 AssertionError Traceback(最近一次调用最后)/var/folders/p5/vj203w_s7fn3wwzxfj69n33c0000gn/T/ipykernel_87319/52429652.py 在以上是关于编写一个对txt文件中的行进行编号的函数,跳过空白行并将输出写入另一个文件的主要内容,如果未能解决你的问题,请参考以下文章
PANDAS 中类似 SQL 的窗口函数:Python Pandas Dataframe 中的行编号