#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».