[英]Not giving desired output in python
this program is supposed to read an input file that has a category called year. 该程序应该读取一个名为year的类别的输入文件。 So, if the user types 198, the output should give all the years having 198 in it eg 1981,1982,...etc.
因此,如果用户键入198,则输出应该给出其中包含198的所有年份,例如1981,1982,...等。 But, the output is also picking up 199
但是,产量也增加了199
Sierra Leone WB_LI 0 Africa 1992
Sierra Leone WB_LI 0 Africa 1993
Sierra Leone WB_LI 0 Africa 1994
Sierra Leone WB_LI 0 Africa 1995
Sierra Leone WB_LI 0 Africa 1996
Sierra Leone WB_LI 0 Africa 1997
Each line of the file contains the following fields, where there is one space between fields: Country (50 characters) Income Level (6 characters) Percent Vaccinated (3 characters) Region (25 characters) Year (4 characters). 该文件的每一行包含以下字段,其中字段之间有一个空格:国家(50个字符)收入等级(6个字符)接种百分比(3个字符)区域(25个字符)年份(4个字符)。 So, altogether I have 92 characters and I am going through each characters from 88 on wards and matching them with characters in year to find the desired year.
所以,我总共有92个字符,我会在88个病房中查看每个字符,并在一年中将它们与字符匹配以找到所需的年份。 I think I probably have some error in my logic and that is also considering 199 as an instance.
我想我的逻辑中可能有一些错误,并且还将199视为一个实例。 I am not supposed to use list or tuple.
我不应该使用列表或元组。 Just file.
只是提交。
Here is what i have done with my code: 以下是我对我的代码所做的事情:
def main():
#checks if the input file exists or not.
#If the file exists, then the program breaks out of the loop and
#moves on. Otherwise, the program halts with an IOError message.
while True:
try:
input_file=open('measles.txt','r')
break
except IOError:
print("Error opening file:",input_file)
break
f2=input("What is the name of the output file? ")
#checks if the output file exists or not.
#If the file exists, then the program breaks out of the loop and
#moves on. Otherwise, the program halts with an IOError message.
while True:
try:
output_file=open(f2,'w')
break
except IOError:
print("Error opening file:",output_file)
break
#for loop prints all lines of the input file to the output file.
year=str(input('Input year: '))
line=input_file.readline().strip()
while line!="":
for line in input_file:
if year==line[88:92]:
output_file.write(line)
elif year==line[88:91]:
output_file.write(line)
elif year==line[88:90]:
output_file.write(line)
elif year==line[88:89]:
output_file.write(line)
elif year.lower()=="all" or year=="''" or year=='""':
print(line)
line=input_file.readline().strip()
input_file.close()
output_file.close()
main()
Could anyone please take a look at my code and point out the problem? 有谁可以看看我的代码,并指出问题? Thanks Here is a few lines of the file that I am dealing with.
谢谢这是我正在处理的文件的几行。
Afghanistan WB_LI 11 Eastern Mediterranean 1980
Afghanistan WB_LI 0 Eastern Mediterranean 1981
Afghanistan WB_LI 8 Eastern Mediterranean 1982
Afghanistan WB_LI 9 Eastern Mediterranean 1983
Afghanistan WB_LI 14 Eastern Mediterranean 1984
Afghanistan WB_LI 14 Eastern Mediterranean 1985
Afghanistan WB_LI 14 Eastern Mediterranean 1986
Afghanistan WB_LI 31 Eastern Mediterranean 1987
Afghanistan WB_LI 34 Eastern Mediterranean 1988
Afghanistan WB_LI 22 Eastern Mediterranean 1989
Afghanistan WB_LI 20 Eastern Mediterranean 1990
Afghanistan WB_LI 19 Eastern Mediterranean 1991
Afghanistan WB_LI 22 Eastern Mediterranean 1992
Afghanistan WB_LI 25 Eastern Mediterranean 1993
Afghanistan WB_LI 40 Eastern Mediterranean 1994
Afghanistan WB_LI 41 Eastern Mediterranean 1995
Afghanistan WB_LI 42 Eastern Mediterranean 1996
Afghanistan WB_LI 38 Eastern Mediterranean 1997
Afghanistan WB_LI 31 Eastern Mediterranean 1998
Afghanistan WB_LI 31 Eastern Mediterranean 1999
Afghanistan WB_LI 27 Eastern Mediterranean 2000
Afghanistan WB_LI 37 Eastern Mediterranean 2001
Afghanistan WB_LI 35 Eastern Mediterranean 2002
Afghanistan WB_LI 39 Eastern Mediterranean 2003
Afghanistan WB_LI 48 Eastern Mediterranean 2004
Afghanistan WB_LI 50 Eastern Mediterranean 2005
Afghanistan WB_LI 53 Eastern Mediterranean 2006
Afghanistan WB_LI 55 Eastern Mediterranean 2007
Afghanistan WB_LI 59 Eastern Mediterranean 2008
Afghanistan WB_LI 60 Eastern Mediterranean 2009
Afghanistan WB_LI 62 Eastern Mediterranean 2010
Afghanistan WB_LI 65 Eastern Mediterranean 2011
Afghanistan WB_LI 68 Eastern Mediterranean 2012
Albania WB_LMI 90 Europe 1980
Albania WB_LMI 90 Europe 1981
Albania WB_LMI 93 Europe 1982
Albania WB_LMI 96 Europe 1983
Albania WB_LMI 96 Europe 1984
Albania WB_LMI 96 Europe 1985
Albania WB_LMI 96 Europe 1986
Albania WB_LMI 96 Europe 1987
Albania WB_LMI 96 Europe 1988
Albania WB_LMI 96 Europe 1989
Albania WB_LMI 88 Europe 1990
Albania WB_LMI 80 Europe 1991
Albania WB_LMI 87 Europe 1992
Albania WB_LMI 76 Europe 1993
Albania WB_LMI 90 Europe 1994
Albania WB_LMI 91 Europe 1995
Albania WB_LMI 92 Europe 1996
Albania WB_LMI 95 Europe 1997
Albania WB_LMI 89 Europe 1998
Albania WB_LMI 85 Europe 1999
Albania WB_LMI 95 Europe 2000
Albania WB_LMI 95 Europe 2001
Albania WB_LMI 96 Europe 2002
Albania WB_LMI 93 Europe 2003
As I mentioned in a comment, the input you provided doesn't match your description thereof. 正如我在评论中提到的,您提供的输入与您的描述不符。 Your code shows the
year
field starting at index 88
, but your provided input is only 44 characters long. 您的代码显示从索引
88
开始的year
字段,但您提供的输入只有44个字符长。 I'd start there. 我从那里开始。
EDIT: here is how I would write your program, given you can't use any containers. 编辑:这是我如何编写你的程序,因为你不能使用任何容器。
def filter_results(input_file, output_file, year):
for line in input_file:
if not line: continue # skips if the line is blank
if year == '' or line[88:92].startswith(year) or year.lower() == 'all':
output_file.write(line+"\n")
def main():
year = input("Give me a year: ")
try: infile = open('measles.txt','r')
except IOError: print("Error opening file: measles.txt")
try: outfile = open(input("Name of output file?"),'w')
except IOError: print("Error opening output file")
try: infile,outfile
except NameError: raise IOError("One of the files could not be opened")
filter_results(infile,outfile,year)
outfile.close()
infile.close()
main()
That said, I'd begin by reading in the file and writing it to a dict
. 也就是说,我首先阅读文件并将其写入
dict
。 Something like: 就像是:
lines = list()
with open('path/to/input_file') as input_file:
for line in input_file:
lines.append(
{"country":line[0:51].strip(),
"income":line[52:58].strip(),
"vaccinated":line[59:62].strip(),
"region":line[63:88].strip(),
"year":line[89:93].strip()}
# I may have screwed up that string splicing -- do one and doublecheck
year = input("Enter a four-digit year (or part thereof): ")
filtered_list = [line for line in lines if line['year'].startswith(year)]
Also there are some problems in your existing code. 您现有的代码中也存在一些问题。
while True:
try:
input_file = open("measles.txt")
break # ?
except IOError:
print("Error opening file:",input_file)
break # ?
Why are we looping here if we're ALWAYS breaking after one iteration? 如果我们在一次迭代后总是打破,为什么我们在这里循环? Drop the
while True
and just try:except
without the break
s. 放下片刻
while True
然后try:except
没有break
。 If you need to halt the program on exception, then just do except IOError: raise
如果你需要在异常时暂停程序,那么只需执行
except IOError: raise
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.