number=[]
name=[]
null=[]
fh = open("foo.txt","r")
for line in fh:
words=line.split()
for word in words:
if(word=="number"):
number.append(word+1)
print(word)
word=word+2
if(word=="name"):
name.append(word+1)
word=word+2
else:
null.append(word+1)
word=word+2
print("number " " instances " " name " " instances " " null " " instances ")
print(number, len(number), name, len(name), null, len(null) )
fh.close()
这是我最小的python代码。我的目的是按列打印功能(例如名称)及其实例数。我的测试文件(foo.txt)具有以下顺序
name Mathew
null has
number 4
null dogs
null and
null a
null cat
我知道我的代码不正确。特别是在追加语句和增量语句期间。我的问题是: 一种。什么是正确的陈述? b。我该怎么做才能获得同等输出,特别是如果有很多单词的话,换句话说,我可以包装在列中吗?
预期产量
number instances name instances null instances
4 1 Mathew 1 has, dogs, 5
and, a, cat
这里绝对是初学者。
答案 0 :(得分:0)
a。字符串方法'split'-返回值列表,因此'words'变量将是文件当前行中的单词列表。 当您迭代“单词”时-迭代当前行中的每个单词,因此您不需要它。
for line in fh:
words=line.split()
if (words[0] == "number"):
number.append(int(words[1]))
print(words[1])
if (words[0] == "name"):
name.append(words[1])
else:
null.append(words[1])
如果名称可以包含多个单词,则可以使用:
name.append(" ".join(words[1:]))
如果您不需要从文件中分离“空”值和“数字”,则可以使用:
elif (words[0] == "name"):
b。如果要打印按列输出,则可以使用字符串方法“格式”:
print("numbers: {:>20}, instances: {:>20}".format(str(number), len(number)))
print("name: {:>20}, instances: {:>20}".format(str(name), len(name)))
print("null: {:>20}, instances: {:>20}".format(str(null), len(null)))
答案 1 :(得分:0)
这可行,我主要使用了您的代码,以便您轻松理解如何进行改进:
name=[]
null=[]
number=[]
fh = open("foo.txt","r")
for line in fh:
word= line.split()[0]
if word == "name":
name.append(line.rstrip('\n').split()[1])
elif word =="number":
number.append(line.rstrip('\n').split("number")[1])
else:
null.append(line.rstrip('\n').split("null")[1])
print("number " " instances " " name " " instances " " null " " instances ")
print(" ".join(str(x) for x in number), len(number), " ".join(str(x) for x in name), len(name), " ".join(str(x) for x in null), len(null) )