的Python:在汉字是从该行以文件如何我读并将它们转换成浮动和可疑交易报告,这取决于他们是否是数字

2019-09-18 06:28发布

我有一个看起来像一个文件:

1 1 C C 1.9873 2.347 3.88776

1 2 C Si 4.887 9.009 1.21

我想在文件的内容读,行由行。 当我只就行号我用:

for line in readlines(file):
    data = map(float, line.split)

但是,当line.split的所有元素是数字,这仅适用。 我怎样才能使它存储字母串和数字作为花车?

Answer 1:

for line in infile:
    data = [x if x.isalpha() else float(x) for x in line.split()]

会有问题,如果你的数据含有非英文字母,也没有有效的浮点数字(例如,“A1”)领域。 您的数据似乎并没有从你说的这些,但如果这样做,在try/except伊戈尔建议的方法可能会更适用。

我可能会使用可以给出类型然而尝试,更通用的功能:

def tryconvert(value, *types):
    for t in types:
        try:
            return t(value)
        except (ValueError, TypeError):
            continue
    return value

for line in infile:
    data = [tryconvert(x, int, float) for x in line.split()]

这将转换成任何可以转换为整数的int ,做不到这一点,它会尝试float ,最后它只是放弃,并返回原来的价值,我们知道这将是一个字符串。 (如果我们不知道这是一个字符串,我们可以只坚持str在与我们通话结束时tryconvert()



Answer 2:

$ cat 1.py
def float_or_str(x):
  try:
     return float(x)
  except ValueError:
     return x

line = '1 1 C C 1.9873 2.347 3.88776'
print map(float_or_str, line.split())

$python 1.py
[1.0, 1.0, 'C', 'C', 1.9873, 2.347, 3.88776]


Answer 3:

您可以使用方法str.isalpha(),str.isalphanum(),以决定str.isdigit如果你的字符串是一个数字或没有。



文章来源: 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?
标签: python input