NightGeologyst
@NightGeologyst
Экстра/Интро - верт

Как верно вытащить список всех папок и файлов включенных в папки?

при выводе директорий через библиотеку OS и вывод в файл формата .csv каждый символ добавляется как отдельный элемент списка.
import os
import csv
from typing import List

root_path = "~MM_Common_Data\космоснимок"
directory: list[str] = []
for root, dirs, files in os.walk(root_path):
    for name in files:
        print(os.path.join(root, name))
        directory.append(os.path.join(root, name))

with open('DIR_Geo.csv', 'w', encoding='utf-8', newline="") as f:
    writer = csv.writer(f)
    writer.writerows(directory)


Вывод в print:

~MM_Common_Data\космоснимок\Thumbs.db
~MM_Common_Data\космоснимок\Иванов-тект.схема.grf

Вывод в файл формата .csv:

~,M,M,_,C,o,m,m,o,n,_,D,a,t,a,\,к,о,с,м,о,с,н,и,м,о,к,\,T,h,u,m,b,s,.,d,b
~,M,M,_,C,o,m,m,o,n,_,D,a,t,a,\,к,о,с,м,о,с,н,и,м,о,к,\,И,в,а,н,о,в,-,т,е,к,т,.,с,х,е,м,а,.,g,r,f

Подскажите пожалуйста, каким способом избавиться от запятых, ибо строчек большое количество и объединение элементов построчно выделить мне не удается.

upd:
выводится все строка в качестве элемента списка, но после каждого символа добавлена запятая
  • Вопрос задан
  • 142 просмотра
Решения вопроса 1
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
Я думаю, проблема была в csv writer-е, надо внимательно изучить, как он работает внутри. Мне лень его изучать, в данном случае проще собрать элементы списка через «перевод строки» в одну длинную строку и всё разом записать в файл.
import os

root_path = "testfolder"
directory = []
for root, dirs, files in os.walk(root_path):
    for name in files:
        directory.append(os.path.join(root, name))
with open('DIR_Geo.csv', 'w', encoding='utf-8') as f:
    f.write('\n'.join(directory))

Это костыль, но в данном случае, когда мы элементы списка формируем из os, и мы понимаем, что в них не попадут какие-нибудь специальные символы вроде переводов строки, табуляций и т.п., то ничего страшного произойти не должно.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
xenon
@xenon
Too drunk to fsck
У вас как выглядит directory? Это список строк, как я понимаю. А writerows ожидает "список списков строк". (каждый элемент верхнего списка, список из строк, каждая строка в отдельную клетку).
Вот поэтому он строку и итерирует побуквенно, обрабатывая ее как список.

попробуйте в directory.append() давать не строку, а список из одного элемента (этой строки) и должно быть счастье.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы