#python #python-3.x #file
#python #python-3.x #файл
Вопрос:
Я хочу обратить сохраненные строки файла назад и добавить к каждой строке строку, а затем сохранить ее в новый текстовый файл. Ввод :
A
Z
E
R
Вывод:
Exemple/R
Exemple/E
Exemple/Z
Exemple/A
Комментарии:
1. Добро пожаловать в StackOverflow! Что вы думаете о том, как это решить? Пожалуйста, покажите ваш текущий код, чтобы помочь вам с вашим вопросом.
Ответ №1:
Редактировать:
После просмотра вопроса редактирования в новом формате, например
A
Z
E
R
Тогда вы можете
- Перевернул строку с помощью
[::-1]
. - Разделить на новую строку с помощью
split("n")
. - А затем выполните цикл и выведите нужное значение таким образом:
txt = '''A
Z
E
R'''
txt = txt[::-1]
split = txt.split("n")
for x in split:
print("Exemple/" x)
Кроме того, если вы хотите читать и записывать в файл, вы можете:
- Откройте новый файл
- Используется
readlines()
для получения текста в виде строки по строкам - Сделайте то же самое, что и раньше, чтобы получить обратный текст
- Запись в новый файл
with open("your_file_to_read") as f:
txt = f.readlines()
txt = txt[::-1]
with open("your_file_to_write", "w") as outf:
for x in txt:
outf.write("Exemple/" x)
Комментарии:
1. Итак, OP предполагал, что входные данные должны быть в отдельных строках, а не разделены пробелом (они просто не понимали, как сделать так, чтобы предварительно отформатированный текст с разрывами строк правильно отображался в Markdown). Я исправил форматирование вопроса; возможно, вы захотите немного скорректировать свой ответ, чтобы он соответствовал.
2. Обновленный ответ, спасибо. Я не заметил о формате.
3. Спасибо @ J.F. это работает как шарм, я добавил только » n» для последней строки
4. Добро пожаловать. Также, если проблема была решена, отметьте ответ как принятый, приветствуется.
Ответ №2:
Условия
Из того, какую информацию вы предоставляете, я предполагаю, что вы имеете в виду следующее:
- Считайте из текстового файла и извлекайте из файла строку, подобную «A».
- Измените порядок строк в обратном порядке
- Объедините несвязанную строку с каждым символом файловой строки. (например, «R» —> «Example/R»)
- Создайте новый текстовый файл.
- Выведите новую строку в новый текстовый файл.
- При необходимости повторите для новых строк файла.
Программа
С учетом этих условий я создал функцию с именем line_inverter(), которая принимает следующие аргументы:
- import_file_name (имя файла, из которого вы хотели бы получить данные)
- имя_файла_экспорта (новый файл, который вы хотите создать и экспортировать данные)
- prefix_string (строка, которую вы хотите добавить перед каждым символом в строке)
Вот исходный код в Python 3. (Если вы хотите вместо этого увидеть его в репозитории на GitHub, нажмите здесь)
# inverts file line(s) and writes to a new file
def line_inverter(import_file_name, export_file_name, prefix_string):
# tries to open import file in reading mode
f1 = open(import_file_name, "r")
# tries to create export file in append mode
f2 = open(export_file_name, "a")
# creates a list with each line in a separate index
line_list = f1.readlines()
# reverses line order
line_list.reverse()
# closes import file, since all data is stored in line_list
f1.close()
# loops through line_list to modify individual indices
for line in line_list:
# strips the "n" from the string
line = line.strip("n")
# concatenates prefix_string and a character from the line_list
x = prefix_string line
# appends the line to the new file
f2.write(x)
# once the loop is finished, close the new file
f2.close()
Я все еще новичок в этом, так что это определенно не идеально. Это работает на основе того, что я тестировал. Тем не менее, если он каким-либо образом блокируется, дайте мне знать, я бы не хотел давать ошибочную программу: 3
Комментарии:
1.
try
Блок делает это так, что, если вводится неправильный тип параметраimport_file_name
, он продолжит выполнение функции (после печати некоторого текста) — вы, вероятно, этого не хотите. В любом случае, я не уверен, зачем вам вообще перехватывать TypeError, поскольку это исключение достаточно описательно. Также подумайте о том, чтобы научиться использоватьwith
блок: это сделало бы обработку файлов этого кода более питонической. Наконец, я бы не стал использовать буквуi
для неиндексного вfor
цикле — это выглядит немного запутанно.2. Спасибо, что рассказали мне! Я удалил инструкции и оставил все как есть. О, и я обязательно этому научусь, что-нибудь улучшу! Я также заменю i на что-то другое, извинения!
3. Я получаю синтаксическую ошибку в def line_inverter(). я пробовал def line_inverter(«import_file.txt «, «import_file.txt «,»www./» и def line_inverter(f1, f2,x) должен ли я импортировать любую библию для обработки функции def?
4. Если вы хотите вызвать функцию, вам нужно написать новую строку в файле python с приведенным выше кодом и ввести следующее:
line_inverter("import_file.txt", "export_file.txt", "www./")
, Я сделал это, чтобы взять из одного файла, экспортировать в другой с измененными строками. И не включайте «def» спереди, это означает, что вы определяете (или переопределяете) функцию.