python-3.x 将偶数行移到奇数行的最后一行(最后一行除外)

dojqjjoe  于 2023-08-08  发布在  Python
关注(0)|答案(2)|浏览(115)

我在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

我的脚本问题在哪里?

u5i3ibmn

u5i3ibmn1#

问题在于,您将输出文件作为输入文件处理,因为输出目录是输入目录的子目录,而os.path.walk()进入子目录。每个文件合并两次。
如果你不需要递归地处理目录层次结构,就不要使用os.path.walk(),只需要循环遍历input_directory中的文件即可:

for file in glob.glob(os.path.join(input_directory, "*.txt")):

字符串
如果确实需要递归,最简单的解决方案是将输出目录移出输入目录。另一种选择是检查root是否在output目录中并跳过这些文件。

mf98qq94

mf98qq942#

您可以使用zip()和slicing来执行任务:

with open('your_file.txt', 'r') as f_in:
    lines = [line for line in map(str.strip, f_in) if line]

for a, b in zip(lines[:-1:2], lines[1:-1:2]):
    print(f'{a};{b}')

print(lines[-1])

字符串
印刷品:

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

相关问题