Skip to content
Advertisement

Why am I getting error after looping into file and trying to join the list

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))
User contributions licensed under: CC BY-SA
9 People found this is helpful
Advertisement