我在E:\Desktop\prog\OCR
目录中有一些txt文件,每个文件的格式如下:
Fytytyotyrtyttyran
57.338
CtyOtyBtyOtyL
13.318
AytLtGtyOtyL
10.254
Ayttssemtybtyly
5.33
BtyAtySItyC
2.061
AytryPL
1.53
Lirtysyrtyp
1.466
Ctry
0
Patretsyttrcal
0
1965 Q2
字符串
现在我想把上面的列表转换成以下格式:
Fytytyotyrtyttyran;57.338
CtyOtyBtyOtyL;13.318
AytLtGtyOtyL;10.254
Ayttssemtybtyly;5.33
BtyAtySItyC;2.061
AytryPL;1.53
Lirtysyrtyp;1.466
Ctry;0
Patretsyttrcal;0
1965 Q2
型
请注意,每个文件的最后一行不需要任何更改。
我为此编写了以下python脚本:
import os
input_directory = r'E:\Desktop\prog\OCR'
output_directory = r'E:\Desktop\prog\OCR\output'
def merge_even_odd_lines(input_path, output_path):
with open(input_path, 'r', encoding='utf-8') as infile:
lines = infile.readlines()
merged_lines = []
for i in range(0, len(lines), 2):
if i + 1 < len(lines):
odd_line = lines[i].strip()
even_line = lines[i + 1].strip()
merged_lines.append(f"{odd_line};{even_line}")
else:
merged_lines.append(lines[i].strip())
with open(output_path, 'w', encoding='utf-8') as outfile:
outfile.write('\n'.join(merged_lines))
def process_files(directory_path):
if not os.path.exists(output_directory):
os.makedirs(output_directory)
for root, _, files in os.walk(directory_path):
for file in files:
if file.endswith('.txt'):
input_file_path = os.path.join(root, file)
output_file_path = os.path.join(output_directory, file)
merge_even_odd_lines(input_file_path, output_file_path)
if __name__ == "__main__":
process_files(input_directory)
print("Conversion completed successfully.")
型
但我的脚本将我的文件转换为以下格式:
Fytytyotyrtyttyran;57.338;CtyOtyBtyOtyL;13.318
AytLtGtyOtyL;10.254;Ayttssemtybtyly;5.33
BtyAtySItyC;2.061;AytryPL;1.53
Lirtysyrtyp;1.466;Ctry;0
Patretsyttrcal;0;1965 Q2
型
我的脚本问题在哪里?
2条答案
按热度按时间u5i3ibmn1#
问题在于,您将输出文件作为输入文件处理,因为输出目录是输入目录的子目录,而
os.path.walk()
进入子目录。每个文件合并两次。如果你不需要递归地处理目录层次结构,就不要使用
os.path.walk()
,只需要循环遍历input_directory
中的文件即可:字符串
如果确实需要递归,最简单的解决方案是将输出目录移出输入目录。另一种选择是检查
root
是否在output
目录中并跳过这些文件。mf98qq942#
您可以使用
zip()
和slicing来执行任务:字符串
印刷品:
型