Percorra também as subpastas e registre o caminho, a extensão, o tamanho e a data de modificação de cada arquivo. Comece com 4 arquivos de exemplo pequenos e preserve os originais e os resultados existentes.
Conteúdo verificado 2026.09.19Inclui arquivos de exemplo
Ver o sumário
A tradução foi feita com IA. Confira o código, as unidades e os valores junto com o original. A revisão por falantes nativos de cada idioma ainda não foi concluída. 한국어
Para quem éIniciantes em Python que até agora registravam manualmente a quantidade e a localização dos documentos de uma pasta
Preparação
Prepare o Python 3.12 ou superior e confira a versão com python --version no terminal.
Extraia o ZIP de exemplo em uma nova pasta. Não execute diretamente de dentro do arquivo compactado.
Abra o terminal na pasta em que está example.py. Se o comando python não estiver disponível no Windows, use py; no macOS e no Linux, use python3 conforme o ambiente.
Não é necessário instalar pacotes externos nem ter uma conta. Os materiais incluídos são dados sintéticos de elaboração própria.
01Criar a primeira lista com quatro arquivos
A criação de uma pasta não basta para considerar esta tarefa concluída. O CSV deve incluir cada um dos quatro arquivos originais uma única vez, o total exibido deve ser de 63 bytes e o conteúdo original deve permanecer intacto. Confira primeiro essas condições com os materiais incluídos e depois amplie o trabalho para suas próprias pastas.
Localize example.py, README.txt e a pasta sample_files na pasta extraída.
Abra sample_files e confira readme.txt, empty.txt e as subpastas docs e reports. empty.txt está vazio de propósito.
Execute o comando abaixo uma vez no terminal. Não mova nem edite os arquivos de entrada durante a execução.
Quando aparecerem a mensagem de conclusão e o caminho de saída, abra outputs/file_list.csv.
bash
python example.py
02Entender os caminhos e as colunas
O código usa como base a localização de example.py, não a pasta atual do terminal. Ele examina apenas sample_files dentro de BASE, por isso você pode mover toda a pasta do exemplo mantendo a mesma estrutura relativa. outputs fica fora da área examinada para que o CSV gerado não volte a se misturar com a lista de entrada.
Coluna
Significado
O que conferir ao ler
relative_path
Caminho relativo a partir de sample_files
Arquivos com o mesmo nome são diferenciados quando estão em pastas distintas.
extension
Última extensão em letras minúsculas
Se não houver extensão, aparece (없음); para tar.gz, a extensão é .gz.
size_bytes
Tamanho do arquivo como número inteiro de bytes
0 indica um arquivo vazio, não um arquivo ausente.
modified_utc
Data e hora de modificação do arquivo em UTC
O sufixo +00:00 indica UTC, que não é o horário local da Coreia.
relative_path usa barras para facilitar a leitura entre sistemas operacionais. Os resultados são ordenados por esse caminho. Como não dependem da ordem interna de busca dos arquivos, fica mais fácil comparar a ordem das linhas para uma mesma entrada.
03Código completo para executar
collect_files reúne as informações e main grava o novo CSV. outputs só é criada após a conferência da entrada. Se encontrar uma pasta que não pode ser lida ou um link, o programa para em vez de salvar uma lista parcial como se fosse um resultado correto.
example.py
"""sample_files를 읽어 outputs/file_list.csv에 목록을 기록합니다. 원본은 변경하지 않습니다."""
import csv
import os
import sys
from datetime import datetime, timezone
from pathlib import Path
BASE = Path(__file__).resolve().parent
INPUT = BASE / "sample_files"
OUTPUT = BASE / "outputs"
FIELDS = ["relative_path", "extension", "size_bytes", "modified_utc"]
def is_link(path):
# Windows 연결 디렉터리(junction)도 Python 3.12 이상에서는 거부합니다.
return path.is_symlink() or getattr(path, "is_junction", lambda: False)()
def collect_files(folder):
if is_link(folder) or not folder.is_dir():
raise ValueError("sample_files는 실제 폴더여야 합니다.")
rows = []
def stop_on_error(error):
raise error
# 하위 폴더까지 읽되, 링크를 따라 다른 폴더로 나가지 않습니다.
for root, dirs, files in os.walk(folder, followlinks=False, onerror=stop_on_error):
root = Path(root)
for name in dirs + files:
if is_link(root / name):
raise ValueError(f"링크는 처리하지 않습니다: {root / name}")
for name in sorted(files):
path = root / name
if not path.is_file():
raise ValueError(f"일반 파일이 아닙니다: {path}")
stat = path.stat()
rows.append({
"relative_path": path.relative_to(folder).as_posix(),
"extension": path.suffix.lower() or "(없음)",
"size_bytes": stat.st_size,
"modified_utc": datetime.fromtimestamp(
stat.st_mtime, timezone.utc
).isoformat(timespec="seconds"),
})
return sorted(rows, key=lambda row: row["relative_path"])
def main():
if OUTPUT.exists() or OUTPUT.is_symlink():
raise FileExistsError("outputs가 이미 있습니다. 기존 결과를 옮긴 뒤 실행하세요.")
rows = collect_files(INPUT) # 모두 읽은 뒤에만 출력 폴더를 만듭니다.
OUTPUT.mkdir()
target = OUTPUT / "file_list.csv"
# x는 기존 파일을 덮어쓰지 않는 모드입니다. BOM은 한글 CSV 열기에 도움을 줍니다.
with target.open("x", encoding="utf-8-sig", newline="") as stream:
writer = csv.DictWriter(stream, fieldnames=FIELDS)
writer.writeheader()
writer.writerows(rows)
print(f"완료: {len(rows)}개 파일, 합계 {sum(row['size_bytes'] for row in rows)}바이트")
print(target)
return 0
if __name__ == "__main__":
try:
raise SystemExit(main())
except (OSError, ValueError) as error:
print(f"중지: {error}", file=sys.stderr)
raise SystemExit(2)
csv.DictWriter trata a separação das colunas e as aspas do CSV. newline recebe uma string vazia, e o arquivo é salvo com UTF-8 BOM. O arquivo de saída é aberto no modo x para não ser sobrescrito caso já exista outro com o mesmo nome. Neste exemplo, antes disso é verificada a existência da própria pasta outputs.
04Conferir as quatro linhas e o total
relative_path
extension
size_bytes
docs/agenda.txt
.txt
15
empty.txt
.txt
0
readme.txt
.txt
17
reports/sales.csv
.csv
31
O total da tabela é 15 + 0 + 17 + 31 = 63 bytes. O terminal também exibe a mensagem de conclusão «완료: 4개 파일, 합계 63바이트». A primeira linha do CSV contém os nomes das colunas, por isso a planilha mostra cinco linhas ao incluir o cabeçalho. Não se esqueça de contar empty.txt.
05Conferir a lista e a preservação dos originais
Compare um a um os quatro caminhos do CSV com as localizações reais em sample_files. As próprias pastas docs e reports não aparecem como linhas de dados.
Confira se o arquivo vazio está incluído com 0 bytes e se as extensões estão diferenciadas como .txt e .csv.
Abra sample_files/readme.txt e confira se o texto original Sample inventory continua presente.
Execute novamente o mesmo comando. Ele deve parar com a mensagem «outputs가 이미 있습니다», que indica que a pasta de saída já existe, e preservar o primeiro resultado.
As condições de recusa também fazem parte do projeto. Não apague o código que bloqueia a saída só porque ele impede uma nova execução. Se precisar preservar o resultado anterior, guarde outputs com outro nome que inclua a data antes de executar novamente, ou extraia o ZIP em uma nova pasta para iniciar outro teste.
06Aplicar à sua própria pasta
Não use toda a sua pasta de trabalho logo no início. Coloque primeiro alguns arquivos representativos em uma cópia de sample_files. Nomes com caracteres coreanos ou espaços são tratados como objetos de caminho. Links simbólicos e diretórios vinculados a outro local não são suportados, por isso é melhor usar uma cópia pequena composta por arquivos comuns.
Preserve a entrada e os resultados do exemplo anterior e crie uma nova pasta de prática.
Coloque em sample_files de 5~10 arquivos que você consiga contar manualmente. Inclua também um nível de subpastas.
Gere a lista e confira se os caminhos relativos apontam para os locais esperados.
Aumente a quantidade de arquivos sem alterar as regras que você conferiu. O tamanho do arquivo pode ser diferente do comprimento do conteúdo, por isso mantenha a unidade em bytes.
Se a pasta de entrada estiver vazia, será gerado um CSV apenas com o cabeçalho, e a contagem de arquivos será 0. Isso é diferente de parar porque a pasta não existe. Uma pasta vazia também pode ser uma situação normal de trabalho; diferencie esses casos ao interpretar os resultados.
07Resolver erros comuns
Sintoma
Possível causa
Próximo passo
O comando python não é encontrado
Problema na instalação do interpretador ou na configuração do caminho
Confira primeiro python --version e tente py no Windows.
sample_files deve ser uma pasta real
A pasta está ausente ou foi usado um link
Confira se todo o ZIP foi extraído e restaure a pasta real.
outputs já existe
Restam resultados de uma execução anterior
Guarde os resultados existentes em outro local e execute novamente.
Os caracteres coreanos aparecem incorretamente
O programa que abre o arquivo interpreta a codificação incorretamente
Selecione UTF-8 ao importar o CSV e não altere o original.
Erro de permissão de leitura
Pasta inacessível ou caminho bloqueado
Reduza primeiro o escopo a uma cópia de prática à qual você tenha acesso.
08O que esta lista garante
O resultado reúne as informações dos arquivos observadas durante a execução. Não é uma verificação de duplicatas por conteúdo nem um backup que permita recuperação. Dois documentos do mesmo tamanho podem ter conteúdos diferentes. Se precisar comparar hashes, adicione esse objetivo e as colunas correspondentes separadamente.
Este exemplo introdutório não trata alterações de nomes ou conteúdo por outros programas durante a busca, atrasos em unidades de rede nem o carregamento de muitos arquivos de uma só vez na memória. Se a gravação em disco falhar durante a saída, poderá restar um outputs incompleto. Confira tanto a mensagem de conclusão quanto a quantidade de linhas do resultado.
Registro de execução e verificação
2026-09-19 · Windows 11 · CPython 3.12.14 · Sem pacotes adicionais · Executado em uma cópia temporária da distribuição
Conferidos 4 arquivos, incluindo os de pastas aninhadas, e um total de 63 bytes
Uma pasta de entrada vazia gera apenas o cabeçalho
Recusa de pasta de entrada inexistente e de outputs já existente
Conferida a independência dos caminhos ao executar de outra pasta de trabalho
Conferido que o SHA-256 dos arquivos de entrada permanece igual antes e depois da execução
Limites da verificação
Não foi executado no macOS nem no Linux.
A data de modificação pode mudar após a extração.
Não foram testadas alterações simultâneas nos arquivos nem situações de falta de espaço em disco.
O código de exemplo, os nomes de arquivos e as chaves de entrada são mantidos como no original. Consulte também os comandos e os procedimentos de conferência do texto traduzido.
Material de prática original · Guarde os arquivos originais separadamente antes de executar.
Fontes de referência
As explicações e os exemplos são de elaboração própria. Os comportamentos e conceitos relacionados podem ser consultados nas fontes oficiais abaixo.
Combine em ordem arquivos CSV com a mesma estrutura de colunas e adicione a coluna source_file. Confira com dados pequenos os nomes de itens com vírgulas, as colunas ausentes e as saídas já existentes.
Confira em uma tabela os nomes atuais e os novos e verifique possíveis conflitos. Somente ao informar --apply são criadas cópias em uma nova pasta, preservando os originais.