Печать CSV из списка python

#python #csv

#python #csv

Вопрос:

Итак, у меня есть этот небольшой скрипт на Python, который я использую для проверки того, содержит ли папка файлы csv. У меня это работает до сих пор, но я пытаюсь распечатать CSV-файл из результирующего списка CSV-файлов на консоль.

 import os
import logging
import csv

logger = logging.getLogger()
logger.setLevel(logging.INFO)

files = []
source = '/Users/username/source_folder'
files = checkFile(source)

if len(files) != 0:
    for i in files:
        with open(i, newline='') as file:
            for row in csv.reader(file):
                print(row)

def checkFile(directory):
    result = []
    if len(os.listdir(directory)) == 0:
        return result
    else:
        for file in os.listdir(directory):
            if file.endswith('.csv'):
              result.append(file)
            else:
                continue
    return result
  

Я продолжаю получать эту ошибку:

 FileNotFoundError: [Errno 2] No such file or directory:
  

Итак, результат будет примерно таким: ['test_01.csv','test_02.csv']
Но я хотел бы прочитать каждый файл из списка на консоль.

test_01.csv

 id,first_name,last_name,phone,
1,joe,black,555555555
2,jack,flash,1111111111
  

test_02.csv

 id,first_name,last_name,phone,
1,joe,black,555555555
2,jack,flash,1111111111
  

Комментарии:

1. Используйте os.path.join(source, i) в open() функции. Или result.append(os.path.join(directory, file)) .

Ответ №1:

os.listdir(...) возвращает только имена файлов / вложенных папок (не полные пути). Если файлы csv не находятся в вашем текущем рабочем каталоге, вам нужно будет объединить их имена с каталогом, например с os.path.join(...) :

 def checkFile(directory):
    result = []
    if len(os.listdir(directory)) == 0:
        return result
    else:
        for file in os.listdir(directory):
            if file.endswith('.csv'):
              result.append(os.path.join(directory, file))
            else:
                continue
    return result
  

Комментарии:

1. Обратите также внимание, что os.path.splitext(...) это безопаснее, чем string.endswith(...) , поскольку технически возможно (хотя и немного странно) иметь каталог, который заканчивается на «.csv».