Код на Python для открытия всех файлов в каталоге и печати их первой строки

#python #python-3.x

#python #python-3.x

Вопрос:

В папке abc находятся 2 файла «.XFR» с обычным текстом внутри них. Цель состоит в том, чтобы написать скрипт, который открывает каждый из файлов и печатает их первую строку. Попробовал следующий код:

 import os
import glob   

f = []
path = r"C:UsersAjayDesktopabc"
for (dirpath, dirnames, filenames) in os.walk(path):
    f.extend(filenames)
    break
print(f)

files=glob.glob(path)   
for file in files:     
    f=open(file, 'r')  
    f.readlines()
    print(f)    
    f.close()
  

В нем перечислены все файлы правильно, но для fileopen он выдает ошибку, которая гласит:

 (base) C:UsersAjayDesktop>python readline.py
['1234.XFR', '23465.XFR']
Traceback (most recent call last):
File "readline.py", line 14, in <module>
f=open(file, 'r')
PermissionError: [Errno 13] Permission denied: 
'C:\Users\Ajay\Desktop\abc'
  

Отпечаток экрана

Как с этим справиться?

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

1. Добавьте «» в конец вашей переменной path, затем f = открыть(путь файл, ‘r’). При отладке (печати) переменных files вы получите «ошибку»

2. Добавьте имя файла в glob.glob(путь)

3. это ошибка разрешения PermissionError: [Ошибка 13] В разрешении отказано: он должен предоставить им разрешение на чтение

Ответ №1:

Во-первых, исходный код с os.walk является избыточным. Вы переопределяете его с помощью glob . Удалите его.

Во-вторых, вы используете glob неправильно. Он принимает выражение, указывающее, какие файлы вам нужны.

Попробуйте:

 files=glob.glob(path   os.sep   "*.XFR")   
  

Таким образом, вы получите только файлы, которые заканчиваются на "XFR" . Убедитесь, что регистр совпадает.

 path = r"C:UsersAjayDesktopabc"
files=glob.glob(path   os.sep   '*.XFR')   
for f in files:     
    with open(f, 'r') as fp:
        print(next(fp, "no data in file: "   f))    
  

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

1. Спасибо. Это помогло.

2. Я думаю, что ваш ответ правильный, если вы объясните, почему он выдает ошибку разрешения, которая часто пропускается, и немного уточните, мы все будем счастливы