Python 将一个字符串写入一个 textile 中最多一行

Python writing a string to an maximum of one line in a textile

我有一个数据框,可以下载here。第一列包含一个问题,而第二列包含该问题的答案。

我的目标: 创建两个 .txt 文件,一个包含问题,一个包含答案。

每个问题和答案都应该写在单独的行上。因此每个 .txt 文件中的第 50 行包含第 50 个问题和第 50 个答案。 (即,如果文件重新组合,questions/answer 对匹配)

下面的代码片段打开一个文本文件,将列的每一行写入该文件并删除任何 \n。它似乎适用于大约 96% 的行,但它很少在多个文本行中写入单个 DF 行。

这些罕见事件似乎没有任何定义特征,它们不是很长等等。对于我上面附加的文件,第一个出现在答案栏中的文本文件第 395 行。

f = open("Answers.txt","a", newline="\n",encoding='utf-8')
for i in tqdm(data['answers_body']):
        line =  i.replace('\n','')
        f.write(line)
        f.write("\n")

有趣的是,如果我删除 f.write 并只打印到控制台,它似乎按预期工作......问题只发生在写入过程中。

这是因为它读取该行,这就是它打印该行的原因,但是当您写入文件时,它正在同一行上写入, 您必须将换行符添加到该行,以便下一行跳到新行 为简单起见,您可以转到 file.write(line+'\n')

我建议改用 print(line, file=f) ,如果需要,可以将可选的分隔符设置为 end="some sign"...

编辑 抱歉写得这么复杂:打印也可以 "write" 到文件中。它还提供了一个替代结局的选项,见上文 - 对于你的情况,它将是:

    f = open("Answers.txt","a", newline="\n",encoding='utf-8')
    for i in tqdm(data['answers_body']):
        line =  i.replace('\n','')
        print(line, file=f)
    f.close()

如果在其他情况下想要或需要使用 print(line, file=f, end='\t') 而不是换行符,制表符是最后一个符号,下一个 print() 在制表符之后继续

更新: 产生 1001 行的完整版本

import csv

data = []
with open('SO_dataset.csv', 'rb') as csvfile:
    spamreader = csv.reader(csvfile)
    for row in spamreader:
        print ', '.join(row)
        data.append((row[2] if len(row)> 2 else ''))

f = open("Answers.txt", "w")
i = 0
for line in data:
    i += 1
    line =  line.replace('\n',' ')
    f.write(str(i) + '. ' + line)
    f.write("\n")
f.close

实际上,您的原始代码看起来不错。如果你在谈论 txt 文件换行并换行到下一行,那就是记事本的 属性...如果你将它们输入到 word 或 excel,它们应该没有换行。