Чтобы изменить скрипт Python для поиска строки в файле для диапазона номеров - PullRequest
2 голосов
/ 03 ноября 2019

Я пытаюсь написать код, который будет искать файлы в каталоге, и для любого из них, которые содержат строку с «51» по «100» в пятой строке, будет напечатано имя файла.

Я попытался изменить первый оператор в цикле 'for' на:

s = i
for i in range(51,100):

, но это просто возвращает ошибку, поскольку он ищет строку, а не int

path = './data/'
files = [f for f in glob.glob(path + "*.crs", recursive=False)]

# Open the file
for f in files:
    line = 5
    fh: TextIO = open(f)
    text = fh.read()

    # Conditions
    for line in f:
        s: str = '62'  # Takes input of a string from user

        if s in text:  # string is present in the text file
            print(f)
        break
    else:
        continue
    fh.close()

TypeError: 'in <string>' requires string as left operand, not int

Мой текущий код напечатает имя файла, содержащего '62' в пятой строке. Я просто ищу способ заставить его распечатать все файлы, которые содержат любое число от 51 до 100 в пятой строке.

MAT Mathematics
Calculus I
TH 8/26/19 12/11/19
3
62

1 Ответ

1 голос
/ 03 ноября 2019

Вероятно, есть более элегантный способ сделать это, но это то, что я придумал. По сути, для каждого файла он открывает файл и читает построчно, пока не дойдет до строки, которую вы хотите проверить. Обратите внимание, что строка 5 является шестой строкой файла, потому что номера строк смещены от 0. Затем она проверяет строку на наличие любых чисел в numbersToCheck. Я использовал str(v) for v in range(51, 100) во второй строке для преобразования целых чисел в строки, которые затем сохраняются в numbersToCheck.

lineToCheck = 5
numbersToCheck = [str(v) for v in range(51, 100)] #convert integers to strings

path = './data/'
files = [f for f in glob.glob(path + "*.crs", recursive=False)]

for f in files:
    fh = open(f) #open the file
    for lineNo, line in enumerate(fh):
        if lineNo == lineToCheck: #Once it gets to the correct line
            if any(numberStr in line for numberStr in numbersToCheck): #Checks for numbers
                print(line)
                break #don'1t continue checking this file, move on to the next.
    fh.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...