Python: How Can I Read In The Characters From A Line In A File And Convert Them To Floats And Strs, Depending On If They Are Numbers Or Letters?
Solution 1:
$ cat 1.py
deffloat_or_str(x):
try:
returnfloat(x)
except ValueError:
return x
line = '1 1 C C 1.9873 2.347 3.88776'printmap(float_or_str, line.split())
$python 1.py
[1.0, 1.0, 'C', 'C', 1.9873, 2.347, 3.88776]
Solution 2:
for line in infile:
data = [x if x.isalpha() else float(x) for x in line.split()]
There will be issues if your data contains fields that are neither alphabetic nor valid floating-point numbers (for example, "A1"). Your data doesn't seem to have these from what you said, but if it does, the try/except
approach suggested by Igor would probably suit better.
I would probably use a more generic function that can be given the types to try, however:
deftryconvert(value, *types):
for t in types:
try:
return t(value)
except (ValueError, TypeError):
continuereturn value
for line in infile:
data = [tryconvert(x, int, float) for x in line.split()]
This will convert anything that be converted to an integer to an int
, failing that it will try float
, and then finally it just gives up and returns the original value, which we know will be a string. (If we didn't know it was a string we could just stick str
on the end of our call to tryconvert()
.)
Solution 3:
You can use methods str.isalpha(), str.isalphanum(), str.isdigit to decide if your string is a number or not.
Post a Comment for "Python: How Can I Read In The Characters From A Line In A File And Convert Them To Floats And Strs, Depending On If They Are Numbers Or Letters?"