I have large text file which has numbers. I want to loop through the file and append the numbers to the list_of_numbers. Problem is that the loop appends to the list but not in the way I want, that’s why the list looks like this after iteration
['n', '+', '1', '6', '1', '0', '8', '5', '0', '7', '7', '6', '4', 'n', '+', '1', '6', '1', '0', '7', '6', '4', '6', '0', '2', '9', 'n', '+', '1', '6', '1', '0', '7', '6', '4', '6', '8', '4', '6', 'n', '+', '1', '6', '1', '0', '8', '5', '0', '5', '9', '3', '4', 'n', '+', '1', '6', '1', '0', '7', '6', '4', '0', '7', '8', '3', 'n', '+', '1', '6', '1', '0', '7', '6', '4', '9', '2', '8', '2', 'n', '+', '1', '6', '1', '0', '7', '6', '4', '0', '0', '4', '9', 'n']
this is just part of the output. I want this to be in this type [123455334,492023232,32322323]
I tried to do this but it does not work and gets errors
print(list([int(x) for x in ''.join(list_of_numbers).split('n')]))
here is my full code
from tkinter import * from tkinter import filedialog import selenium import time from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import Select from selenium import webdriver from selenium import webdriver list_of_numbers=[] full_list_of_numbers=[] def openFile(): tf = filedialog.askopenfilename( initialdir="C:/Users/MainFrame/Desktop/", title="Open Text file", filetypes=(("Text Files", "*.txt"),) ) pathh.insert(END, tf) tf = open(tf) # or tf = open(tf, 'r') data = tf.read() txtarea.insert(END, data) tf.close() for i in data: list_of_numbers.append(i) print(list_of_numbers) ws = Tk() ws.title("PythonGuides") ws.geometry("400x450") ws['bg']='#fb0' txtarea = Text(ws, width=40, height=20) txtarea.pack(pady=20) pathh = Entry(ws) pathh.pack(side=LEFT, expand=True, fill=X, padx=20) Button( ws, text="Open File", command=openFile ).pack(side=RIGHT, expand=True, fill=X, padx=20) ws.mainloop() print(list_of_numbers) while ' ' in list_of_numbers: list_of_numbers.remove(' ') print(list([int(x) for x in ''.join(list_of_numbers).split('n')]))
Advertisement
Answer
Look at that part
tf = open(tf) # or tf = open(tf, 'r') data = tf.read() txtarea.insert(END, data) tf.close() for i in data: list_of_numbers.append(i)
data
is one big string. Then you iterate over it one char at a time and append that single char (incl, '+'
and 'n'
to the list. So you get what you get.
Replace the above snippet with following:
with open(tf) as f: # use context manager for line in f: txtarea.insert(END, line) list_of_numbers.append(int(line))
Note, this assumes there are no empty lines in your file. If there are, then
with open(tf) as f: # use context manager for line in f: txtarea.insert(END, line) line = line.strip() if line: list_of_numbers.append(int(line))