Скрипт Python, извлекающий определенные строки из каталога, содержащего несколько текстовых файлов ⇐ Python
Скрипт Python, извлекающий определенные строки из каталога, содержащего несколько текстовых файлов
Я новичок в Python, создал этот скрипт Python через Chat GPT и просматриваю несколько вопросов на этом сайте. Он работает с файлами, которые у меня есть, но он очень жестко запрограммирован для этих конкретных текстовых файлов. Как я могу сделать его менее жестко закодированным, чтобы он искал и находил нужные строки?
Вот мой код, а ниже — образец файлов .txt, которые он обрабатывает.
импортировать ОС Защиту Extract_lines (входной_файл, выходной_файл): с open(input_file, 'r') как файл: # Читает последнее имя файла linea = [строка для строки в файле, если line.startswith('lasinfo')] линия = ул (линия) линия = линия[31:-5] если len(linea) == 0: linea ='Имя файла не определено!' с open(input_file, 'r') как файлом: # Считывает последние данные lineb = [строка для строки в файле, если line.startswith('PROJCS')] строкаb = ул(строкаb) линияб = линияб[14:41] если len(lineb) == 0: lineb ='ДАТУМ не определен!' с open(input_file, 'r') как файл: # Считывает данные о плотности лазерных точек linec = [строка для строки в файле, если line.startswith('плотность точек')] строка = ул (линия) строка = строка[2:-4] lined = linec[27:31] # удаляет значение плотности (точек/м) из оператора если len(linec) == 0: linec ='Плотность точек не указана' lineout = linea + "," + lineb + "," + linec + "," + lined + '\n' с open(output_file, 'a') в качестве вывода: вывод.write(линейный выход) defprocess_txt_files(directory_path, выходной_файл): # Сканирует каталог на наличие файлов .txt для обработки с открытым (выходной_файл, 'w'): проходить для имени файла в os.listdir(directory_path): если имя_файла.endswith(".txt"): путь_файла = os.path.join(путь_каталога, имя файла) Extract_lines (путь_к файлу, выходной_файл) путь_каталога = 'C:/Users/rinicholls/Richard/Gnarabup_LiDAR/LiDAR/Gnarabup_South_AVWS/reports' выходной_файл = 'density.txt' process_txt_files(путь_к_каталогу, выходной_файл) Текстовый файл:
Отчет lasinfo (231025) для 'Gnarabup_South_sph_e310n6230_1AVWS.las' отчет обо всех записях заголовка LAS: подпись файла: 'LASF' идентификатор источника файла: 0 глобальное_кодирование: 1 Идентификатор проекта, данные GUID 1–4: 00000000-0000-0000-0000-000000000000 версия major.minor: 1.4 системный идентификатор: «LAStools (c) от Rapidlasso GmbH» программное обеспечение для создания: 'lasheight (210418) коммерческое' день/год создания файла: 278/2023 размер заголовка: 375 смещение к данным точки: 375 число вар. длина записей: 0 формат данных точки: 6 длина записи данных точки: 30 количество записей точек: 0 количество баллов по возврату: 0 0 0 0 0 масштабный коэффициент x y z: 0,01 0,01 0,01 смещение x y z: 0 0 0 мин x y z: 311439,81 6230000,08 -38,91 макс x y z: 311999,99 6231999,80 -33,17 начало записи пакета данных формы сигнала: 0 начало первой расширенной записи переменной длины: 0 количество записей длины расширенной_переменной: 0 расширенное количество очковых записей: 7586 расширенное количество баллов при возврате: 7586 0 0 0 0 0 0 0 0 0 0 0 0 0 0 отчетный минимум и максимум для всех записей точек LAS... Х 31143981 31199999 Y 623000008 623199980 З-3891-3317 интенсивность 0 0 return_number 1 1 число_возвратов 1 1 Edge_of_flight_line 0 1 scan_direction_flag 0 1 классификация 13 13 scan_angle_rank -11 18 пользовательские_данные 1 1 point_source_ID 174 177 gps_time 363998052.416096 363998902.558917 расширенный_возвращаемый_номер 1 1 расширенное_номер_возвратов 1 1 расширенная_классификация 13 13 Extended_scan_angle -1820 2924 расширенный_канал_сканера 0 0 количество первых возвратов: 7586 количество промежуточных возвратов: 0 количество последних возвратов: 7586 количество одиночных возвратов: 7586 крытая площадь в квадратных единицах/килоунитах: 30136/0,03 плотность точек: все возвраты 0,25, последние только 0,25 (на квадратную единицу) интервал: все возвраты 1,99 длятся только 1,99 (в единицах) обзор расширенного количества возвратов данного импульса: 7586 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 гистограмма классификации точек: 7586 проволочная решетка (13)
Я новичок в Python, создал этот скрипт Python через Chat GPT и просматриваю несколько вопросов на этом сайте. Он работает с файлами, которые у меня есть, но он очень жестко запрограммирован для этих конкретных текстовых файлов. Как я могу сделать его менее жестко закодированным, чтобы он искал и находил нужные строки?
Вот мой код, а ниже — образец файлов .txt, которые он обрабатывает.
импортировать ОС Защиту Extract_lines (входной_файл, выходной_файл): с open(input_file, 'r') как файл: # Читает последнее имя файла linea = [строка для строки в файле, если line.startswith('lasinfo')] линия = ул (линия) линия = линия[31:-5] если len(linea) == 0: linea ='Имя файла не определено!' с open(input_file, 'r') как файлом: # Считывает последние данные lineb = [строка для строки в файле, если line.startswith('PROJCS')] строкаb = ул(строкаb) линияб = линияб[14:41] если len(lineb) == 0: lineb ='ДАТУМ не определен!' с open(input_file, 'r') как файл: # Считывает данные о плотности лазерных точек linec = [строка для строки в файле, если line.startswith('плотность точек')] строка = ул (линия) строка = строка[2:-4] lined = linec[27:31] # удаляет значение плотности (точек/м) из оператора если len(linec) == 0: linec ='Плотность точек не указана' lineout = linea + "," + lineb + "," + linec + "," + lined + '\n' с open(output_file, 'a') в качестве вывода: вывод.write(линейный выход) defprocess_txt_files(directory_path, выходной_файл): # Сканирует каталог на наличие файлов .txt для обработки с открытым (выходной_файл, 'w'): проходить для имени файла в os.listdir(directory_path): если имя_файла.endswith(".txt"): путь_файла = os.path.join(путь_каталога, имя файла) Extract_lines (путь_к файлу, выходной_файл) путь_каталога = 'C:/Users/rinicholls/Richard/Gnarabup_LiDAR/LiDAR/Gnarabup_South_AVWS/reports' выходной_файл = 'density.txt' process_txt_files(путь_к_каталогу, выходной_файл) Текстовый файл:
Отчет lasinfo (231025) для 'Gnarabup_South_sph_e310n6230_1AVWS.las' отчет обо всех записях заголовка LAS: подпись файла: 'LASF' идентификатор источника файла: 0 глобальное_кодирование: 1 Идентификатор проекта, данные GUID 1–4: 00000000-0000-0000-0000-000000000000 версия major.minor: 1.4 системный идентификатор: «LAStools (c) от Rapidlasso GmbH» программное обеспечение для создания: 'lasheight (210418) коммерческое' день/год создания файла: 278/2023 размер заголовка: 375 смещение к данным точки: 375 число вар. длина записей: 0 формат данных точки: 6 длина записи данных точки: 30 количество записей точек: 0 количество баллов по возврату: 0 0 0 0 0 масштабный коэффициент x y z: 0,01 0,01 0,01 смещение x y z: 0 0 0 мин x y z: 311439,81 6230000,08 -38,91 макс x y z: 311999,99 6231999,80 -33,17 начало записи пакета данных формы сигнала: 0 начало первой расширенной записи переменной длины: 0 количество записей длины расширенной_переменной: 0 расширенное количество очковых записей: 7586 расширенное количество баллов при возврате: 7586 0 0 0 0 0 0 0 0 0 0 0 0 0 0 отчетный минимум и максимум для всех записей точек LAS... Х 31143981 31199999 Y 623000008 623199980 З-3891-3317 интенсивность 0 0 return_number 1 1 число_возвратов 1 1 Edge_of_flight_line 0 1 scan_direction_flag 0 1 классификация 13 13 scan_angle_rank -11 18 пользовательские_данные 1 1 point_source_ID 174 177 gps_time 363998052.416096 363998902.558917 расширенный_возвращаемый_номер 1 1 расширенное_номер_возвратов 1 1 расширенная_классификация 13 13 Extended_scan_angle -1820 2924 расширенный_канал_сканера 0 0 количество первых возвратов: 7586 количество промежуточных возвратов: 0 количество последних возвратов: 7586 количество одиночных возвратов: 7586 крытая площадь в квадратных единицах/килоунитах: 30136/0,03 плотность точек: все возвраты 0,25, последние только 0,25 (на квадратную единицу) интервал: все возвраты 1,99 длятся только 1,99 (в единицах) обзор расширенного количества возвратов данного импульса: 7586 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 гистограмма классификации точек: 7586 проволочная решетка (13)
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение