У меня есть файл, который я загружаю через FTP. Это очень большой файл, поэтому я хочу только получить первое сообщение, 20 строк для работы с ним прямо сейчас. Я хочу записать эти 20 строк в новый файл на моем локальном компьютере. В этом процессе я хочу совместить значение в строке.Получить первые x строк из файла и совпадение на подстроке
Файл является труба с разделителями и начало каждой строки выглядит следующим образом:
9999-12-31 | XX | ...
Я хочу писать только в выходной файл, когда значение этого второго поля равно XX, иначе проигнорируйте его.
Вот основы моего кода:
def writeline(line):
file.write(line + "\n")
file = open(localDir + fileName, "w+")
ftp.retrlines("RETR '" + remotePath + "'", writeline)
Все этот код работает нормально, чтобы загрузить файл, если я хочу, чтобы вывести весь файл. Я попытался поместить цикл while в мою функцию writeline
, но он просто напишет каждую строку количество раз, указанное в моем цикле, что имеет смысл в ретроспективе. Кажется, что цикл while должен быть каким-то образом в функции retrlines
.
Я довольно новичок в Python, поэтому я ценю любую помощь, которую вы можете предоставить, и за ваше терпение с моим вопросом noob.
Update Хорошо, это похоже на матч на подстроки, я могу сделать:
line[11:13]
, но это все еще оставляет меня с проблемой пытаются получить только первые х линий для работы с ,
Вы можете попробовать использовать itertools.islice в функции обратного вызова –
Должно ли это быть частью более крупной программы. Я хотел бы просто использовать awk для этого, а не для python, для чего он создан. Вероятно, это было бы так: '' awk -F | {if (NR <21) {print $ 2}}> new_file.txt''' Возможно, вы можете открыть канал для файла для подачи awk, чтобы вы не располагали его локально, учитывая, что вы указываете размер , – dave