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,它们应该没有换行。
我有一个数据框,可以下载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,它们应该没有换行。