我是python的新手。尝试编写将使用文件中的数字列的脚本,其中还包含标头。这是一个文件示例:

@File_Version: 4
PROJECTED_COORDINATE_SYSTEM
#File_Version____________-> 4
#Master_Project_______->
#Coordinate_type_________-> 1
#Horizon_name____________->
sb+
#Horizon_attribute_______-> STRUCTURE
474457.83994    6761013.11978
474482.83750    6761012.77069
474507.83506    6761012.42160
474532.83262    6761012.07251
474557.83018    6761011.72342
474582.82774    6761011.37433
474607.82530    6761011.02524


我想跳过标题。这是我尝试过的。如果我知道哪些字符会出现在标题中,例如“#”和“ @”,它当然起作用。但是,如何跳过所有包含字母字符的行?

in_file1 = open(input_file1_short, 'r')
out_file1 = open(output_file1_short,"w")
lines = in_file1.readlines ()
x = []
y = []
for line in lines:
    if "#" not in line and "@" not in line:
        strip_line = line.strip()
        replace_split = re.split(r'[ ,|;"\t]+', strip_line)
        x = (replace_split[0])
        y = (replace_split[1])
        out_file1.write("%s\t%s\n" % (str(x),str(y)))
in_file1.close ()


非常感谢你!

最佳答案

我认为您可以使用一些内置的插件,例如:

import string
for line in lines:
    if any([letter in line for letter in string.ascii_letters]):
        print "there is an ascii letter somewhere in this line"


但是,这只是在寻找ascii字母。

您还可以:

import unicodedata
for line in lines:
    if any([unicodedata.category(unicode(letter)).startswith('L') for letter in line]):
        print "there is a unicode letter somewhere in this line"


但前提是我能正确理解我的unicode类别。

甚至更干净(使用其他答案的建议。这适用于unicode行和字符串):

for line in lines:
    if any([letter.isalpha() for letter in line]):
        print "there is a letter somewhere in this line"


但是,有趣的是,如果您这样做:


在[57]中:u'\ u2161'.isdecimal()

出[57]:错误

在[58]中:u'\ u2161'.isdigit()

出[58]:错误

在[59]中:u'\ u2161'.isalpha()

Out [59]:错误


罗马数字“ Two”的unicode都不是,
但是unicodedata.category(u'\ u2161')确实返回了表示数字的“ Nl”(而u'\ u2161'.isnumeric()为True)。

10-05 23:33