Здесь много чего происходит, и многое нужно изменить.
Ваш код после mainloop()
не будет работать, пока вы не закроете приложение. Поэтому вместо этого давайте переместим ваш код синтаксического анализа в функцию, предназначенную для обновления onWork.
Вы можете создать большую часть полей меток и полей ввода, используя al oop. Это поможет уменьшить количество строк и упростить чтение. Со списком полей ввода вы можете использовать значения list + index, чтобы получить то, что вам нужно.
У вас было много кода, который ничего не делал или никогда не вызывался. Я удалил все это из примера.
oneCountries
, вероятно, должен быть списком в отдельном файле, который вы импортируете. Если вы следуете правилам длины строк PEP8, вы в конечном итоге добавите несколько строк в ваш код.
Я не сильно изменился в вашем коде синтаксического анализа, за исключением нескольких мелких вещей, поскольку я этого не делаю У меня есть данные для тестирования, поэтому я не могу написать лучшую версию, как есть. Тем не менее, я вижу, что есть много мест, которые могут ошибаться. Все ваши условия имеют проблемы. Например, вы запускаете al oop со значением l oop, равным line
, затем запускаете подциклы с тем же значением line
, что приведет к перезаписи, прежде чем оно достигнет следующего if. Или у вас нет условия else, если оператор if
не выполнен, так что остальная часть вашего кода может потерпеть неудачу без определения этих переменных. Поэтому, если вы можете предоставить некоторые данные файла примера, я могу обновить эту часть.
У вас было несколько операций импорта, которые вы не использовали. Постарайтесь, чтобы ваш импорт был чистым и лаконичным.
После удаления всего неиспользуемого кода и переделки другого кода ваш пример вырос с 320 строк до 140+. Переработанный код ниже. Дайте мне знать, если у вас есть какие-либо вопросы:
import tkinter as tk
from tkinter import scrolledtext
from itertools import islice
import re
def click_work():
print('clicked!!')
print('do work is now in the function!!')
the_file = txt1.get('1.0', 'end-1c').split('\n')
print(the_file)
for line in the_file:
line = line.strip()
# print(line)
if re.match(r'Blah-2020'.upper(), line.upper()):
print('the_id', line)
the_id = line # had to rename due to "id" being a built in function.
if re.match(r'Submitted: ', line):
date = line
for line1 in islice(the_file, 2):
title = line1
for line2 in islice(the_file, 3):
authors = line2
for line3 in islice(the_file, 3):
ms_type = line3
for line4 in islice(the_file, 3):
extra_data = line4
if line.startswith('Submitting Author:'):
country_parsing = True
elif line.startswith('Running Head:'):
country_parsing = False
else:
country_parsing = False
print(country_parsing)
if country_parsing:
for d in countries:
if d in line:
my_other_list.append(d)
if line.startswith('Author\'s Cover Letter:'):
cover_letter_parsing = True
elif line.startswith('If you have been invited to submit an article for a supplement, '
'please select the title of the supplement:'):
cover_letter_parsing = False
else:
cover_letter_parsing = False
if cover_letter_parsing:
cover_letter.append(line)
if re.match(r'Discipline:', line):
for sub_line in islice(the_file, 2):
discipline = sub_line
# print(line)
# print(r'Overall Similarity Index Percentage:' in line)
if r'Overall Similarity Index Percentage:' in line:
ithenticate = line
# note several lines will error if a condition was not met previously.
# so if I were you I would write in some default values just in case match fails.
ithenticate = float(re.sub('%', '', ithenticate.split(':')[1])) / 100
first_author = authors.split(',')[0]
date = date.split(':')[1].split(';')[0].strip(' ')
id_short = re.sub('Blah'.upper(), '', the_id.upper())
countries_without_duplicates = list(dict.fromkeys(my_other_list))
cover_letter.pop(0)
countrry = ', '.join(countries_without_duplicates)
results = [authors, first_author, the_id, date, ms_type, discipline, ithenticate,
id_short, extra_data, my_other_list[0], my_other_list[-1], countrry]
for ndex, entry in enumerate(entry_list3):
if ndex < len(results):
entry.delete(0, 'end')
entry.insert(0, results[ndex])
print("@@@@@@@@@@\n@@@@@@@@@@\n@@@@@@@@@@\n")
print("All Authors: " + authors)
print("First Author: " + first_author)
print("\nMS ID: " + the_id)
print("\nMS Title: " + title)
print("Submission date: " + date)
print("MS type: " + ms_type)
print("Discipline: " + discipline)
print("iThenticate: " + str(ithenticate))
print("MS ID (short version): " + id_short)
print("Extra info: " + extra_data)
print("First Author's Country: " + my_other_list[0])
print("Last Author's Country: " + my_other_list[-1])
print("All Author's Countries (w/o duplicates): " + countrry)
oneCountries = "Afghanistan, Albania, Algeria, Andorra, Angola, Antigua & Deps, Argentina, Armenia, Australia, Austria, Azerbaijan, Bahamas, Bahrain, Bangladesh, Barbados, Belarus, Belgium, Belize, Benin, Bhutan, Bolivia, Bosnia Herzegovina, Botswana, Brazil, Brunei, Bulgaria, Burkina, Burma, Burundi, Cambodia, Cameroon, Canada, Cape Verde, Central African Rep, Chad, Chile, China, Republic of China, Colombia, Comoros, Democratic Republic of the Congo, Republic of the Congo, Costa Rica, Côte d’Ivoire, Ivory Coast, Republic of Côte d'Ivoire, Croatia, Cuba, Cyprus, Czech Republic, Danzig, Denmark, Djibouti, Dominica, Dominican Republic, East Timor, Ecuador, Egypt, El Salvador, Equatorial Guinea, Eritrea, Estonia, Ethiopia, Fiji, Finland, France, Gabon, Gaza Strip, The Gambia, Georgia, Germany, Ghana, Greece, Grenada, Guatemala, Guinea, Guinea-Bissau, Guyana, Haiti, Holy Roman Empire, Honduras, Hungary, Iceland, India, Indonesia, Iran, Iraq, Republic of Ireland, Israel, Italy, Ivory Coast, Jamaica, Japan, Jonathanland, Jordan, Kazakhstan, Kenya, Kiribati, North Korea, South Korea, Kosovo, Kuwait, Kyrgyzstan, Laos, Latvia, Lebanon, Lesotho, Liberia, Libya, Liechtenstein, Lithuania, Luxembourg, Macedonia, Madagascar, Malawi, Malaysia, Maldives, Mali, Malta, Marshall Islands, Mauritania, Mauritius, Mexico, Micronesia, Moldova, Monaco, Mongolia, Montenegro, Morocco, Mount Athos, Mozambique, Namibia, Nauru, Nepal, Newfoundland, Netherlands, New Zealand, Nicaragua, Niger, Nigeria, Norway, Oman, Ottoman Empire, Pakistan, Palau, Panama, Papua New Guinea, Paraguay, Peru, Philippines, Poland, Portugal, Prussia, Qatar, Romania, Rome, Russian Federation, Rwanda, St Kitts & Nevis, St Lucia, Saint Vincent & the Grenadines, Samoa, San Marino, Sao Tome & Principe, Saudi Arabia, Senegal, Serbia, Seychelles, Sierra Leone, Singapore, Slovakia, Slovenia, Solomon Islands, Somalia, South Africa, Spain, Sri Lanka, Sudan, Suriname, Swaziland, Sweden, Switzerland, Syria, Tajikistan, Tanzania, Thailand, Togo, Tonga, Trinidad & Tobago, Tunisia, Turkey, Turkmenistan, Tuvalu, Uganda, Ukraine, United Arab Emirates, United Kingdom, United States, Uruguay, Uzbekistan, Vanuatu, Vatican City, Venezuela, Vietnam, Yemen, Zambia, Zimbabwe"
lbl_list = ['Authors: ', '1st Author: ', 'MS ID: ', 'MS Title: ', 'Sub. Date: ',
'MS Type: ', 'Discipline: ', 'iThenticate: ', 'Extra Info: ',
'1st Au Country: ', 'Last Au Country: ', 'All Au Country: ', 'COI parameters: ']
window = tk.Tk()
window.geometry('225x225')
window.title('Title Here')
entry_list1 = [] # you can use these list to get the data from entry fields
entry_list2 = [] # you can use these list to get the data from entry fields
entry_list3 = [] # you can use these list to get the data from entry fields
bool_list = [] # you can use this list to get the data from bool vars
tk.Label(window, text='Add Copy&Paste text here', font=('Arial Bold', 10)).grid(column=0, row=0, sticky='w')
txt1 = scrolledtext.ScrolledText(window, height=0, width=25)
txt1.grid(column=0, row=1)
txt1.insert('insert', 'Paste the text here...')
tk.Button(window, text='Analyze the text', bg='white', fg='green',
command=click_work).grid(column=0, row=4, sticky='w')
tk.Label(window, text='Did you download the files yet?').grid(column=0, row=5, sticky='w')
rad1 = tk.Radiobutton(window, text='yes', value=1)
rad2 = tk.Radiobutton(window, text='no', value=0)
rad1.grid(column=0, row=6, sticky='w')
rad2.grid(column=0, row=6)
tk.Label(window, text='Files:').grid(column=0, row=8, sticky='w')
for i in range(9, 15):
tk.Label(window, text='{})'.format(i)).grid(column=0, row=9, sticky='w')
entry_list1.append(tk.Entry(window, width=25, state='disabled'))
entry_list1[-1].grid(column=0, row=i)
tk.Label(window, text='~~>', font=('Arial Bold', 10)).grid(column=0, row=i, sticky='e')
entry_list2.append(tk.Entry(window, width=25))
entry_list2[-1].grid(column=1, row=i, sticky='w')
bool_list.append(tk.BooleanVar())
bool_list[-1].set(True)
tk.Checkbutton(window, var=bool_list[-1]).grid(column=1, row=9, sticky='e')
for ndex, value in enumerate(lbl_list):
if ndex == 0:
sticky1 = 'se'
sticky2 = 's'
else:
sticky1 = 'ne'
sticky2 = 'n'
tk.Label(window, text=value).grid(column=2, row=ndex+1, sticky=sticky1)
entry_list3.append(tk.Entry(window, width=55))
entry_list3[-1].grid(column=3, row=ndex+1, sticky=sticky2)
bool_list.append(tk.BooleanVar())
bool_list[-1].set(True)
tk.Checkbutton(window, var=bool_list[-1]).grid(column=4, row=ndex+1, sticky=sticky2)
cb_list = ['Title Page', 'Abstract', 'Ethics', 'Consent', 'Contribution', 'COI', 'Funding', 'Cover Letter']
for ndex, value in enumerate(cb_list):
tk.Checkbutton(window, text=value).grid(column=0, row=ndex+16, sticky='w')
countries = oneCountries.split(', ')
my_other_list = []
directory = 'C:/Users/me/Desktop/'
path = 'C:/Users/me/Desktop/read.txt'
cover_letter = []
window.mainloop()