[英]Confused about how lists or os.listdir() work in Python 3
我得到了以下代碼,列表或方法os.listdir()的工作方式很奇怪:
1。
import os
print(os.listdir(r'C:\Users\output'))
返回值:
['AAIT.txt', 'AAL.txt', 'AAME.txt', 'AAOI.txt', 'AAON.txt', 'AAPL.txt', 'AAVL.txt', 'AAWW.txt' ....
不出所料,它是包含所有文件名的單個列表。
2。
import os
for filenames in os.listdir(r'C:\Users\output'):
for filename in filenames:
print(filenames)
返回值:
AAIT.txt
AAIT.txt
AAIT.txt
AAIT.txt
AAIT.txt
AAIT.txt
AAIT.txt
AAIT.txt
AAL.txt
AAL.txt
它將每個名稱文件打印八次。 為什么呢, filenames
是一個列表,它應該像以前的情況一樣打印整個列表,就像我的文件夾中有文件一樣。
3。
import os
for filenames in os.listdir(r'C:\Users\output'):
for filename in filenames:
print(filename)
返回值:
A
A
I
T
.
t
x
t
A
A
...
每行一個角色,這為什么很奇怪? 我希望此代碼能按我想要的方式工作,即每行打印一個文件名。
如何獲取python每行打印一個文件名?
在示例2中,您要打印的結果文件名與文件名中字符的數量完全相同:
for filenames in os.listdir(r'C:\Users\output'):
for filename in filenames:
print(filenames)
filenames
是一個文件名 。 遍歷該文件名會給您單獨的字符,這些字符綁定到filename
(單數),但是您隨后為每個filenames
打印filenames
( 復數 ):
>>> for foo in ('bar', 'bazbaz'):
... for character in foo:
... print(character, foo)
b bar
a bar
r bar
b bazbaz
a bazbaz
z bazbaz
b bazbaz
a bazbaz
z bazbaz
我在此處添加了character
打印以說明發生了什么。 具有8個字符的文件名被打印8次,具有7個字符的文件名(例如'AAL.txt'
)被打印7次, 'AAL.txt'
。
在示例3中,您僅打印單個字符。
刪除多余的循環,您不需要它。 只需循環os.listdir()
的值即可:
import os
for filename in os.listdir(r'C:\Users\output'):
print(filename)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.