Использование For l oop при обработке содержимого каталога в Python - PullRequest
0 голосов
/ 04 апреля 2020

Я пытаюсь выполнить l oop через серию текстовых файлов в каталоге, отыскивая вхождения определенных типов слов и добавляя к каждому найденному слову префикс с определенным пользователем тегом. Мой код выглядит следующим образом.

ACC_Tagged_Test = 'C:/ACC_Tag_Test'

for filename in glob.glob(os.path.join(ACC_Tagged_Test, '*.txt')):
 with open(filename) as f:
    data = f.read()
    data = data.lower()

modals = {"could":1, "would":1, "should":1, "can":1, "may":1, "might":1}
personal_attribute = {"believes":1, "guess":1, "surmise":1, "considers":1, 
"presume":1, "speculate":1, "postulate":1, "surmised":1, "assume":1}
approx_adapt = {"broadly":1, "mainly":1, "mostly":1, "loosely":1, 
"generally":1, "usually":1,"typically":1, "regularly":1, "widely":1}
plaus_shields = {"wonder":1, "suspect":1, "theorize":1, "hypothesize":1, 
"cogitate":1, "contemplate":1, "deliberate":1}

format_modal = "<555>{} ".format
format_attribute = "<666>{} ".format
format_app_adaptor = "<777>{} ".format
format_plaus_shield = "<888>{} ".format


data = " ".join(format_modal(word) if word in modals else word for word in data.split())

data = " ".join(format_attribute(word) if word in personal_attribute else word for word in data.split())

data = " ".join(format_app_adaptor(word) if word in approx_adapt else word for word in data.split())

data = " ".join(format_plaus_shield(word) if word in plaus_shields else word for word in data.split())

with open (filename, "w") as f:

 f.write(str(data))
 print(data) # This is just added in order to check on screen all files
              # Are being processed.

Моя проблема в том, что, хотя код работает с последним файлом в каталоге, он не работает с предыдущими файлами (1 из 10 в этом), я попытался second Для l oop над файлом выписать операторы, но это совсем не работает. Кто-нибудь может объяснить, что я здесь делаю не так?

regards

Ответы [ 2 ]

1 голос
/ 04 апреля 2020

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

Попробуйте с этим отступ:

ACC_Tagged_Test = 'C:/ACC_Tag_Test'

for filename in glob.glob(os.path.join(ACC_Tagged_Test, '*.txt')):
  with open(filename) as f:
      data = f.read()
      data = data.lower()

  modals = {"could":1, "would":1, "should":1, "can":1, "may":1, "might":1}
  personal_attribute = {"believes":1, "guess":1, "surmise":1, "considers":1, 
  "presume":1, "speculate":1, "postulate":1, "surmised":1, "assume":1}
  approx_adapt = {"broadly":1, "mainly":1, "mostly":1, "loosely":1, 
  "generally":1, "usually":1,"typically":1, "regularly":1, "widely":1}
  plaus_shields = {"wonder":1, "suspect":1, "theorize":1, "hypothesize":1, 
  "cogitate":1, "contemplate":1, "deliberate":1}

  format_modal = "<555>{} ".format
  format_attribute = "<666>{} ".format
  format_app_adaptor = "<777>{} ".format
  format_plaus_shield = "<888>{} ".format


  data = " ".join(format_modal(word) if word in modals else word for word in data.split())

  data = " ".join(format_attribute(word) if word in personal_attribute else word for word in data.split())

  data = " ".join(format_app_adaptor(word) if word in approx_adapt else word for word in data.split())

  data = " ".join(format_plaus_shield(word) if word in plaus_shields else word for word in data.split())

  with open (filename, "w") as f:
    f.write(str(data))
    print(data) # This is just added in order to check on screen all files
                # Are being processed.
0 голосов
/ 04 апреля 2020

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

#this overrides the file
with open(filename, "w") as fh:
    fh.write(str(data))

изменить на:

#this append to the file
with open(filename, "a") as fh:
    fh.write(str(data))

Это добавится к вашему текстовому файлу и не переопределит предыдущие добавленные данные с данными за последний l oop.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...