Python Forum
Only getting last record saved...Why
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Only getting last record saved...Why
#1
The following code works. It writes to disk all 17 files I an trying to write to file. Problem is, only the last record in each file is being saved. I could use some help.

# DEFINE LOAD RACE FILE FUNCTION
def load_racefiles() :
	global Race_date
	global master_race_file
	global track_name
	global order
	global h
	global line
	field = ['track','race_number','todays_surface']
	order= []
	track_name = " "
	master_race_file = []
	h = []
	count = 0
	df_filespath = ('C://guis/f_racefiles/')
	rows = 100
	columns = 100
	horse_array = [0 for i in range(rows)] 
	filename = StringVar()
	f_name = StringVar()
	line = ()
	
	fd =    open("dirpath", "r") 
	file_dir = (fd.read())
	fd.close()
	os.chdir(file_dir)
	print(file_dir)
	for f in os.listdir(file_dir): 
		file_name, file_ext = os.path.splitext(f)
		f_name = file_name + file_ext
		file_name = file_name.strip()[3:]
		line_counter = 0
		if file_name == Race_date and file_ext == ".jcp":
			with open(f_name, "r") as csv_file:
				csv_reader = csv.reader(csv_file)
				
				for line in csv_reader:
					
											

				
					
					h = {'track' : line[0],
					'race_number' : line[2], 
					'todays_surface' : line[6],
					
					
					

 				
 						}

				track_name = line[0]
 					#os.chdir(df_filespath)	
				filename = df_filespath + track_name + '.csv'
				with open(filename, 'a') as csv_file:
					d_writer = csv.DictWriter(csv_file, fieldnames = field)
					d_writer.writerow(h)
				
					
		
			
			
				
	my_labeldone= Label( text ="Downloading Complete", fg= "black", font = ("sans_serif" , 16)).place(x=500, y=500)
					
Thank You
Reply
#2
At line43, you create a datastructure for the currently read line. Then on line 56 you write that data out. But you do so by opening (and overwriting) any data that exists. So only the last line is visible. You don't want to open the output file within the per-line loop.
Reply
#3
Thank you. I will try and fix that.
Reply
#4
(Sep-09-2020, 06:30 AM)bowlofred Wrote: Then on line 56 you write that data out. But you do so by opening (and overwriting) any data that exists.
That is not the cause of their problem - they open the file in append mode.
The problem is in the loop on lines 37-51. You virtually loop over the file and read each line, every time replacing h before you have written it to a file. So, only the last row of the source file is written. You either need to move the part where you write (lines 53-58) inside loop or create a list of dicts and then write all of them in one go using csv.DictWriter.writerows() method
If you can't explain it to a six year old, you don't understand it yourself, Albert Einstein
How to Ask Questions The Smart Way: link and another link
Create MCV example
Debug small programs

Reply
#5
I have tried to fix the problem. So looked up the os commands and saw the following used. Problem is I can't get the indentation right no matter where I put it...that line is track_name = line[0] here is the new code.

for f in os.listdir(file_dir): 
        file_name, file_ext = os.path.splitext(f)
        f_name = file_name + file_ext
        file_name = file_name.strip()[3:]
        line_counter = 0
        if file_name == Race_date and file_ext == ".jcp":
            with open(f_name, "r") as csv_file:
                csv_reader = csv.reader(csv_file)
                 
                for line in csv_reader:
                     
                                             
 
                 
                     
                    h = {'track' : line[0],
                    'race_number' : line[2], 
                    'todays_surface' : line[6],
                     
                     
                     
 
                 
                        }
 
           				track_name = line[0]
        path_dir:  str= r"C:\guis\daily_racefiles"      
        filename : str =   (track_name + ".csv")
        path_file = os.sep.join([path_dir, filename])
        with open(path_file, 'a') as csv_file:
            d_writer = csv.DictWriter(csv_file, fieldnames = field)
            d_writer.writerow(h)
                 
    my_labeldone= Label( text ="Downloading Complete", fg= "black", font = ("sans_serif" , 16)).place(x=500, y=500    
I am very frustrated. I have been working on this for 6 hours or so.
Reply
#6
You've been advised to move lines 53-58 (now lines 26-32) inside the loop. you moved just line 26 and actually moved rest of them even more out.
If you can't explain it to a six year old, you don't understand it yourself, Albert Einstein
How to Ask Questions The Smart Way: link and another link
Create MCV example
Debug small programs

Reply
#7
I just moved the code lines you specified into the loop. Here is the error it throws when I run the code.


Milford@LAPTOP-3NUEM60C MINGW64 /c/guis
$ python hello2.py
File "hello2.py", line 1225
track_name = line[0]
^
TabError: inconsistent use of tabs and spaces in indentation
Reply
#8
the error is pretty clear - you mix tab and spaces for indentation. don't do that. Usually IDE has an option to convert tab to certain number of spaces
If you can't explain it to a six year old, you don't understand it yourself, Albert Einstein
How to Ask Questions The Smart Way: link and another link
Create MCV example
Debug small programs

Reply
#9
check out the section here called tab and space mixing towards the bottom of the first post.
Recommended Tutorials:
Reply
#10
Thanks very much you guys. This 70 year old brain really appreciates your time and help.

Milfredo
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Last record in file doesn't write to newline gonksoup 3 517 Jan-22-2024, 12:56 PM
Last Post: deanhystad
  How do I stream and record at the same time with arducam? traderjoe 0 512 Oct-23-2023, 12:01 AM
Last Post: traderjoe
  Using .pb saved model for object detection hobbyist 2 1,229 Aug-03-2022, 05:55 AM
Last Post: hobbyist
  bytes object saved as .mp4 jttolleson 10 6,037 Feb-25-2022, 02:42 PM
Last Post: jttolleson
  Why can't numpy array be restored to a saved value? pjfarley3 1 1,768 Nov-25-2020, 07:40 AM
Last Post: pjfarley3
  Running scripts and location of saved interpreted user-defined classes and functions leodavinci1990 3 2,607 Aug-25-2020, 03:43 AM
Last Post: micseydel
  how can we record a video file from our program output (moving object) Zhaleh 0 1,851 Aug-03-2020, 02:47 PM
Last Post: Zhaleh
  Get the record number of a dBASE dbf file DarkCoder2020 0 1,818 Jun-16-2020, 05:11 PM
Last Post: DarkCoder2020
  Compare 5 variables in a record with an excel sheet!! SEED 1 1,844 Apr-20-2020, 11:10 PM
Last Post: michael1789
  How to insert record into MySQL using Phython abhay_kala 1 2,313 Dec-06-2019, 04:34 PM
Last Post: abhay_kala

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020