sayth
sayth

Reputation: 7048

python receive filename not contents - variable refers to (python3)

I have a script which I want to pass to odo. odo takes a filename as input, as I need to tidy the csv up first I pass it through a script to create a new file which I reference with a variable.

How can I get just the filename from the variable so I can pass it as an argument to odo(from blaze project).

You can see here that from this script pasted to ipython I get the entire contents of the file.

In [8]: %paste
from odo import odo
import pandas as pd
from clean2 import clean
import os

filegiven = '20150704RHIL0.csv'
myFile = clean(filegiven)
toUse = (filegiven + '_clean.csv')
print(os.path.realpath(toUse))

## -- End pasted text --
Surfin' Safari 3 0
... Many lines later
Search Squad (NZ) 4 5
C:\Users\sayth\Repos\Notebooks\20150704RHIL0.csv_clean.csv # from print

I just need to be able to get this name so my script could be, where myFile would give odo the filename not contents.

from odo import odo
import pandas as pd
from clean2 import clean


filegiven = '20150704RHIL0.csv'
myFile = clean(filegiven)

odo(myFile, pd.DataFrame)

Solution

this is how I solved it there would be better ways likely.

from odo import odo
import pandas as pd
from clean2 import clean
import os.path

filegiven = '20150704RHIL0.csv'
clean(filegiven)
fileName = os.path.basename(filegiven)
fileNameSplit = fileName.split(".")
fileNameUse = fileNameSplit[0] + '_clean.' + fileNameSplit[1]


odo(fileNameUse, pd.DataFrame)

Upvotes: 0

Views: 64

Answers (1)

Anand S Kumar
Anand S Kumar

Reputation: 90899

To get a filename from a file object (assumings its standard File object in Python created using open() ) , you can use name variable in it.

Example -

>>> f = open("a.py",'r')
>>> f.name
'a.py'

Please note, for your situation this is unnecessary, maybe you can have your clean(filegiven) return filename instead of file object, and then if you really need the file object you can open it in your script.

Upvotes: 1

Related Questions