簡體   English   中英

看不懂一些讀取文件的代碼行

[英]Don't understand some lines of code that reads a file

這是讀取文件“jason.txt”並計算每個圖像的每個“類別”有多少的代碼。

我使用的文件數據可以在以下位置找到: http://www.practicepython.org/assets/Training_01.txt

counter_dict = {}

with open('jason.txt') as f:
   line = f.readline()

   while line:
     line = line[3:-26]

     if line in counter_dict:
         counter_dict[line] += 1

     else:
         counter_dict[line] = 1

     line = f.readline()

print(counter_dict)

有人可以解釋這條線在做什么:

line = line[3:-26]

為什么我們要兩次使用這條線:

line = f.readline()

line = line[3:-26],獲取從第 4 個字符到末尾的行內容,不包括最后 26 個字符。 它用於從 jason.txt 文件的文件路徑中提取類別名稱。

第一行 = f.readline(),需要在進入 while 循環之前初始化行。 循環中需要第二個來獲取和處理文件的下一行,用於每次迭代。

這是您文件中的示例行:

/a/abbey/sun_aqswjsnjlrfzzhiz.jpg

這被line = f.readline()讀入line變量,因此 while 循環不會因為空的 line 變量而立即退出。

然后在while循環中line = line[3:-26]裁剪掉前3個字符和后26個字符(因為它是文件的一行,你需要在每行的末尾計算返回字符,因此26 而不是 25) 所以對於這一行,你的 line 變量將包含: abbey

while 循環中的 if 語句:

 if line in counter_dict:
         counter_dict[line] += 1

     else:
         counter_dict[line] = 1

如果在counter_dict中找到此時保存abbeyline變量的值,則在字典中將其值增加 1。 如果未找到,則將其添加到字典中,並將值設置為 1。

while 循環所做的最后一件事是使用line = f.readline()從文件中獲取下一行。

它將繼續這樣做,直到沒有下一行,然后打印生成的 json 文件。

暫無
暫無

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

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