Запись чисел в файл в новых строках

#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