簡體   English   中英

沒有在python中提供所需的輸出

[英]Not giving desired output in python

該程序應該讀取一個名為year的類別的輸入文件。 因此,如果用戶鍵入198,則輸出應該給出其中包含198的所有年份,例如1981,1982,...等。 但是,產量也增加了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

該文件的每一行包含以下字段,其中字段之間有一個空格:國家(50個字符)收入等級(6個字符)接種百分比(3個字符)區域(25個字符)年份(4個字符)。 所以,我總共有92個字符,我會在88個病房中查看每個字符,並在一年中將它們與字符匹配以找到所需的年份。 我想我的邏輯中可能有一些錯誤,並且還將199視為一個實例。 我不應該使用列表或元組。 只是提交。

以下是我對我的代碼所做的事情:

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()

有誰可以看看我的代碼,並指出問題? 謝謝這是我正在處理的文件的幾行。

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

正如我在評論中提到的,您提供的輸入與您的描述不符。 您的代碼顯示從索引88開始的year字段,但您提供的輸入只有44個字符長。 我從那里開始。

編輯:這是我如何編寫你的程序,因為你不能使用任何容器。

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()

也就是說,我首先閱讀文件並將其寫入dict 就像是:

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)]

您現有的代碼中也存在一些問題。

while True:
    try:
        input_file = open("measles.txt")
        break # ?
    except IOError:
        print("Error opening file:",input_file)
        break # ?

如果我們在一次迭代后總是打破,為什么我們在這里循環? 放下片刻while True然后try:except沒有break 如果你需要在異常時暫停程序,那么只需執行except IOError: raise

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM