Peshal1067
Peshal1067

Reputation: 193

Renaming csv files according to some contents inside the csv file in python

I have many csv files in one subfolder, say data. Each of these .csv files contain a date column.

430001.csv, 43001(1).csv,43001(2).csv,..........,43001(110).csv etc.

I want to rename all the files in folder according to the date inside column of csv file.

Desired output:

430001-1980.csv, 43001-1981.csv,43001-1985.csv,..........,43001-2010.csv etc.

I tried to follow the steps advised in : Renaming multiple csv files

Still could not get the desired output.

Any help would be highly appreciated.

Thanks!

Upvotes: 0

Views: 532

Answers (1)

Clarius333
Clarius333

Reputation: 93

You can loop through them, extract the date to create a new filename, and then save it.

# packages to import
import os
import pandas as pd
import glob
import sys

data_p = "Directory with your data"
output_p = "Directory where you want to save your output"
retval = os.getcwd() 
print (retval) # see in which folder you are

os.chdir(data_p) # move to the folder with your data
os.getcwd()

filenames = sorted(glob.glob('*.csv'))
fnames = list(filenames) # get the names of all your files
#print(fnames) 

for f in range(len(fnames)):
    print(f'fname: {fnames[f]}\n')
    pfile = pd.read_csv(fnames[f], delimiter=",") # read in file

    #extract filename
    filename = fnames[f]
    parts = filename.split(".") # giving you the number in file name and .csv
    only_id = parts[0].split("(") # if there is a bracket included 

    # get date from your file
    filedate = pfile["date"][0] # assuming this is on the first row
    filedate = str(filedate)

    # get new filename
    newfilename = only_id[0]+"-"+filedate+parts[1]

    # save your file (don't put a slash at the end of your directories on top)
    pfile.to_csv(output_p+"/"+newfilename, index = False, header = True)
    
   

Upvotes: 2

Related Questions