Чтение текстового файла и сортировка по расширению, используя python - PullRequest
0 голосов
/ 20 февраля 2020

Я хотел бы прочитать текстовый файл, используя python. Если найдена строка с. cpp, обработайте ее сначала , а затем, если найдена строка с расширением. java, обработайте ее second .

Test. py - мой пример кода, использующий для l oop, он будет читать Test.txt, а затем сначала обработает метод COMPILE_ JAVA (), а затем выполнит метод COMPILE_ CPP ().

Test.txt

/home/jenkins/workspace/a/Hello.java
/home/jenkins/workspace/b/Hello.cpp
/home/jenkins/workspace/b/Hello1.cpp

Test.py

for f in files:
    ACTION1 = False
    ACTION2 = False
    with open(f, 'r') as file:
        for line in (file):
            if ACTION1 is False and ('.cpp' in line ):
                COMPILE_CPP()
                ACTION1 = True
            elif ACTION2 is False and '.java' in line:
                COMPILE_JAVA()
                ACTION2 = True
                break

Ответы [ 2 ]

2 голосов
/ 20 февраля 2020

IIU C вы можете отсортировать прочитанный список из test.txt по расширению, используя os.path.splitext:

import os

with open(f, 'r') as file:
    sorted_files = sorted(file, key=lambda x: os.path.splitext(x)[1])
    for line in sorted_files:
        # rest of the code

Учитывая

l = ['/home/jenkins/workspace/a/Hello.java',
     '/home/jenkins/workspace/b/Hello.cpp',
     '/home/jenkins/workspace/b/Hello1.cpp']

Затем выполнение sorted(l, key=lambda x: os.path.splitext(x)[1]) возвращает :

['/home/jenkins/workspace/b/Hello.cpp',
 '/home/jenkins/workspace/b/Hello1.cpp',
 '/home/jenkins/workspace/a/Hello.java']

Объяснение:

os.path.splitext возвращает кортеж (root, ext), например, os.path.splitext("dir/myfile.txt") возвращает ("dir/myfile", ".txt"), поэтому lambda x: os.path.splitext(x)[1] возвращает вторую часть ( .txt).

Затем он передается в качестве аргумента функции sorted, поэтому список сортируется по алфавиту по расширению.

1 голос
/ 20 февраля 2020

Может быть, это может помочь? Я использовал сортировку пузырьков для сортировки расширений.

row_list = []
with open("test.txt", "r") as file:
    line = file.readline()
    while line:
        row_list.append(line)

for i in range(1, len(row_list)):
    for j in range(len(row_list), i, -1):
        ext1 = row_list[j-1].split(".")[1]
        ext2 = row_list[j].split(".")[1]
        if ext1 > ext2:
            row_list[j-1], row_list[j] = row_list[j], row_list[j-1]

with open("output_file.txt", "w") as file:
    for row in row_list:
        file.write(f"{row}\n")
...