【发布时间】:2020-12-19 17:25:13
【问题描述】:
我是 Python 新手,想拆分大量超过 5000 个字符的文本文件。虽然我运行以下代码并创建了输出文件,但存在一个错误:
超过 5000 个字符的文件被拆分,但在目标目录中被跳过;如果要拆分文件 026.txt,则跳过 output_26.txt 文件,但将剩余的字符(从 5001 开始)复制到 output_27.txt 中,没问题。看一下截图:
Directory of split files missing output_26.txt
看一下代码:
import os
import codecs
directory = 'path/to/directory'
n = 5000
split_strings = []
file_counter = 1
split_files = []
for filename in os.listdir(directory):
with codecs.open(os.path.join(directory, filename), 'r', encoding='utf-8') as f:
text = f.read()
for index in range(0, len(text), n):
split_strings.append(text[index: index + n])
f.close()
for i in split_strings:
file_counter = split_strings.index(i)
with codecs.open("output_" + str(file_counter) + '.txt', 'w', encoding='utf-8') as o:
o.write(i)
o.close()
file_counter += 1
if len(text) >= n:
split_files.append(filename)
print(split_files)
print("Total split files: {}".format(len(split_files)))
代码中缺少什么?
【问题讨论】:
-
for i in split_strings循环的目的是什么?它分配了file_counter,但在下一个循环中它会立即重新分配,替换之前的值。当循环结束时,file_counter将只是分配的最终值。这是故意的吗? -
@JohnGordon 这是一个非常好的观点!这不是故意的。后来添加了
for i in split_strings循环,但我忘记删除重新分配file counter的行。感谢您指出它,虽然它不能解决问题。 -
使用调试器单步调试代码,这样您就可以准确找出代码错误的地方。
-
如果您可以进一步减少此代码和输入数据,其他人可能更容易帮助您。例如,您可以设置 n = 10 并运行一个包含 25 个字符的文件并显示每个文件的内容吗?其他建议:stackoverflow.com/help/minimal-reproducible-example
-
@MatthewCox 我就是这么做的;我找到了a snippet for splitting strings 并尝试在我的代码中实现它。我只在前 30 个文件中运行它,因为我知道文件 027.txt 和 030.txt 需要拆分。感谢您的评论!