#python
#python
Вопрос:
Я пытаюсь прочитать один файл f1
, он содержит такие числа:
2
5
19
100
34
285
39
12
и я хочу прочитать эти числа, возвести их в квадрат и записать в новый файл, каждый в новой строке. Это мой код:
with open("Data.txt", 'r') as f1, open("Double.txt", 'w') as f2:
Lines = f1.readlines()
for new_line in Lines:
if new_line.isdigit():
x = int(new_line)
x = pow(x, 2)
on_new_line = str(x) "n"
f2.write(on_new_line)
но во втором файле он записывает только
144
Может кто-нибудь помочь мне с этим?
Комментарии:
1. Обратите внимание, что каждая прочитанная вами строка будет иметь новую строку (n). Итак, вам нужно выполнить rstrip (‘n’). И если в строке более одного числа, разделенного пробелом, вам нужно разделить их с помощью split(‘ ‘) или split(‘,’) . Можете ли вы поделиться данными так, как они выглядят в вашем входном файле
2. Просто предложение. Вы должны поместить код в правильный формат, чтобы он был действительным кодом python.
3. он показывает вопрос как встроенный, я не могу его изменить.
4. 2 5 19 100 34 285 39 12 это так, но не в строке, каждое число находится в новой строке, как столбец
5. Ваш второй
if
можно изменить на:if new_line.strip().isdigit():
и ваш код будет работать. Это просто новая строкаisdigit
, которая искажает результат функции.
Ответ №1:
Причина, по которой файл возвращает только 144, заключается в том, что using readlines()
возвращает строку в виде строки, которая включает символ новой строки в конце: n
Мы можем решить эту проблему, прочитав файл целиком и разделив его на символы новой строки, чтобы поместить элементы в массив:
with open('data.txt', 'r') as f1, open('double.txt', 'w') as f2:
lines = f1.read().split('n')
for new_line in lines:
squared = int(new_line)**2
f2.write(f"{squared}n")
Это создаст массив с каждым элементом в виде строки, поэтому в строке 4 мы преобразуем его в int, чтобы возвести его в квадрат.
Мы также записываем каждый элемент в новый текстовый файл, снова добавляя после него символ новой строки.
Ответ №2:
Вы можете повторить выбрасывание файла таким образом :
path1 = "Data.txt"
path2 = "Double.txt"
with open(path1, 'r') as f1, open(path2, 'w') as f2:
for line in f1:
try:
f2.write(str(int(line)**2))
except ValueError:
pass