簡體   English   中英

對列表或os.listdir()在Python 3中的工作方式感到困惑

[英]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.

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