Kokopas
Kokopas

Reputation: 41

Python Pandas: Doing loop for every file in directory

So I have code which works for one particular file in directory.
I want to make a loop which will do the following but for every .csv file in directory
1) Open file 2) Add one column 3) Save file to new location
My code

import pandas as pd  
import os  
import glob 

plik = pd.read_csv('C:\Python\zrodlo\CSCO.csv', delimiter=";")  
plik['Change'] = ((plik['Close'] - plik['Open'])/plik['Open']*100)  
plik.to_csv('C:\Python\zrodlo\csv_nowe_pliki\ew_file.csv')  

Lines which might come in handy for the loop. I did not know how to make good use of them

os.chdir('C:\Python\zrodlo')  
print(os.getcwd())  

for filename in os.listdir('C:\Python\zrodlo'):  
    if filename.endswith(".csv"):  
        print(filename)   

2)  
path = "C:\Python\zrodlo\*.csv"  
for fname in glob.glob(path):  
    print(fname)```

Thank you for your input

EDIT, Question is what to put into last line for loop to save multiple files?

import pandas as pd
import os
import glob

path = "C:\Python\zrodlo\*.csv"
for fname in glob.glob(path):
    print(fname)
    plik = pd.read_csv(fname, delimiter=";")
    plik['Change'] = ((plik['Close'] - plik['Open']) / plik['Open'] * 100)
    plik.to_csv('C:\Python\zrodlo\csv_nowe_pliki\ew_file.csv')

EDIT, SOLUTION

import pandas as pd
import os
import glob

os.chdir('C:\Python\zrodlo')
print(os.getcwd())
for filename in os.listdir('C:\Python\zrodlo'):
    if filename.endswith(".csv"):
        print(filename)
        plik = pd.read_csv('C:\Python\zrodlo\\'+filename, delimiter=";")
        plik['Change'] = ((plik['Close'] - plik['Open'])/plik['Open']*100)
        os.chdir('C:\Python\zrodlo\csv_nowe_pliki')
        plik.to_csv(filename)
        os.chdir('C:\Python\zrodlo')

Upvotes: 0

Views: 704

Answers (1)

Dwa
Dwa

Reputation: 673

Is this what you want?

import pandas as pd  
import os  
import glob 

os.chdir('C:\Python\zrodlo')  
print(os.getcwd())  

for filename in os.listdir('C:\Python\zrodlo'):  
    if filename.endswith(".csv"):  
        print(filename)   
        plik = pd.read_csv('C:\Python\zrodlo\'+filename, delimiter=";")  
        plik['Change'] = ((plik['Close'] - plik['Open'])/plik['Open']*100)
        # You need to change the filename below otherwise you are rewriting every time after you created it
        plik.to_csv(glob.glob("C:\Python\zrodlo\csv_nowe_pliki\ew_file.csv"))  

Upvotes: 1

Related Questions