我是python的新手。尝试编写一个脚本,该脚本将使用来自文件的数字colomns,其中包含一个标题。以下是文件示例:
@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 ()
非常感谢!
答案 0 :(得分:3)
我认为您可以使用这样的内置插件:
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]中:你' \ u2161' .isdecimal()
出[57]:错误
在[58]中:你' \ u2161' .isdigit()
出[58]:错误
在[59]中:你' \ u2161' .isalpha()
出[59]:错误
罗马数字的unicode" Two"不是那些, 但unicodedata.category(u' \ u2161')确实返回了Nl'表示数字(而且' \ u2161' .isnumeric()为True)。
答案 1 :(得分:2)
这将检查每一行中的第一个字符,并跳过所有不以数字开头的行:
for line in lines:
if line[0].isdigit():
# we've got a line starting with a digit
答案 2 :(得分:1)
使用生成器管道过滤输入流。 这将从原始输入行获取行,但停止检查整行中没有字母。
input_stream = (line in lines if
reduce((lambda x, y: (not y.isalpha()) and x), line, True))
for line in input_stream:
strip_line = ...