簡體   English   中英

在文件中查找字符串並打印多行

[英]find a string in a file and print line for multiple lines

首先,我有一個名為data的文件夾,該文件夾中的.txt文件是每個美國州的首字母縮寫。 這些文件具有該年和該州排名前幾的最受歡迎的名稱。 隨機文件中的幾行看起來像這樣

AK,F,1910,Mary,14 

AK,F,1910,Annie,12 

AK,F,1910,Anna,10

AK,F,1910,Margaret,8

AK,F,1910,Helen,7

AK,F,1910,Elsie,6

AK,F,1910,Lucy,6

AK,F,1910,Dorothy,5

AK,F,1911,Mary,12

AK,F,1911,Margaret,7

AK,F,1911,Ruth,7

AK,F,1911,Annie,6

AK,F,1911,Elizabeth,6

AK,F,1911,Helen,6

我的任務是查找用戶給定年份范圍內的最受歡迎名稱(性別也由用戶給出。您可以看到最受歡迎的名稱是帶有新年的第一個。我的代碼如下:

def getTopNames(state, gender, startYear, endYear):
    names = []
    file = open("data/" + state + ".TXT")
    with open(file) as f:
        for line in f:
            if startYear and gender in line:
                names.append(line.split(","))
                if startYear < endYear:
                    startYear += 1
                    names.append(line.split(","))
    print ( lstAll )

這是我得到的錯誤:

File "C:/Python34/CS1 WORK/top_names.py", line 53, in getTopNames
   with open(file) as f:
 TypeError: invalid file: <_io.TextIOWrapper name='data/NY.TXT' mode='r' encoding='cp1252'>

我究竟做錯了什么? 我確保數據文件與我的.py文件所在的文件位於同一文件中。

您嘗試兩次打開文件:

file = open("data/" + state + ".TXT")
with open(file) as f:

並且應該使用

filename = "data/" + state + ".TXT"
with open(filename) as f:

然后,線

if startYear and gender in line:

不能像您認為的那樣起作用。 這實際上意味着

if (startYear) \ # true if startYear is non-zero/nonempty
and (gender in line): # true if the letter M/F occurs *anywhere* in the line

你想要類似的東西

items = line.split(",")
if str(startYear) in items and gender in items:

暫無
暫無

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

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