我循环遍历数据文件中的每一行(包含以空格分隔的“字段”的行),并希望将一个字段的子字符串与另一个静态值进行比较。如果比较为真,我想打印字符串'X',否则'Y'。只是想知道如何使用Python完成它。任何帮助,将不胜感激。感谢。
代码: -
for i in inputm[1:]:
print('\n',i[0].split(':')[0]
,str(datetime.strptime(i[0].split(':')[1],'%Y%m%d'))[:10]
,i[1],round(sum( float(v) if v else 0.0 for v in i[2:6])/4,2)
,i[6][0:23]
)
输入: -
1:20160101 123 10 20 0 0 http://www.google.com/favorites
2:20170101 234 20 30 10 0 http://www.doodle.com/favorites
输出: -
1 2016-01-01 123 7.5 Correct
2 2017-01-01 234 17.5 InCorrect
评论: - 我对这段代码非常感兴趣。
i[6][0:23]
想要将上面的子字符串与http://www.google.com进行比较,如果它们匹配,则打印正确的其他InCorrect。
答案 0 :(得分:-1)
Python提供了一种三元风格的表达式语法,如下所示:
value1 if condition else value2
您可以使用它来打印:
x = some_number()
print( 'X' if x < 10 else 'Y' )
答案 1 :(得分:-1)
不要试图一气呵成,分而治之:
# read the lines
with open('myfile.txt', 'rb') as fp:
rows = fp.readlines()
# split the lines into fields
rows = [row.split() for row in rows]
# create a function to format field values
def fmt_row(row):
res = []
res += row[0].split(':') # split the first field on :
res += [float(field) for field in row[1:-1]] # convert all but first/last field to float
date = res[1]
res[1] = '%s-%s-%s' % (date[:4], date[4:6], date[6:])
return res
# convert/format all the rows
rows = [fmt_row(row) for row in rows]
# finally create the output
output = [[
row[0], # first output field
row[1], # second..
round(sum(row[2:-1]/4), 2),
'Correct' if row[-1] == 'http://www.google.com/favorites' else 'InCorrect'
] for row in rows]
# print the output?
print '\n'.join([' '.join(row) for row in output])
答案 2 :(得分:-2)
您可以使用内联if语句 -
"Correct" if some_condition else "InCorrect"
如果条件为真,则返回“正确”。
但我真的建议你使用一些中间变量。你的代码是不可读的。