Я изучаю английские коренные слова из Википедии. Так как некоторые из примеров слов, перечисленных в Википедии, слишком сложны, я написал скрипт на Python, чтобы отфильтровать их по списку слов, который включает только более простые слова. Я также заблокировал строку заголовка результирующей электронной таблицы с помощью openpyxl. Затем я открыл электронную таблицу в Excel и отсортировал третий столбец вручную .
Проблема в том, что строка заголовка также включается в сортировку (пожалуйста, проверьте фотографии). Я думаю, что это может иметь какое-то отношение к тому факту, что скрипт коснулся только третьего столбца (он же пример столбца слов) и сохранил его как новую копию таблицы. Первый и второй столбцы не были затронуты. Есть ли способ решить это? Заранее спасибо.
Код (плз с акцентом на закомментированную часть):
# rootWordFinder.py - 1. Filter Wikipedia examples for a root word; 2. Find root words in a word
import re, openpyxl, os
# get word lists (CET4&6)
def removeDup(dupList):
tempList = []
for i in range(len(dupList)):
if dupList[i] not in tempList:
tempList += [dupList[i]]
return tempList
cet4File = open('C:\\Users\\zs\\Documents\\PythonScripts\\大学英语四级大纲单词表(贵州大学).txt')
cet4Content = cet4File.read()
cet4File.close()
cet4Regex = re.compile(r'\b([a-zA-Z-]+)(?:(?:\s?\[)|(?:\s[a-z]))')
cet4ListRough = cet4Regex.findall(cet4Content) # list of strings, not list of tuples. If there's only one item in a tuple, the parentheses around it will be automaticlly removed.
cet4List = []
for i in cet4ListRough:
cet4List += [i.lower()]
cet6File = open('C:\\Users\\zs\\Documents\\PythonScripts\\cet6_words(中国教育在线).txt')
cet6Content = cet6File.read()
cet6File.close()
cet6Regex = re.compile(r'\s([a-zA-Z-]{2,})\s')
cet6ListRough = cet6Regex.findall(cet6Content)
cet6List = []
for i in cet6ListRough:
cet6List += [i.lower()]
wordList = removeDup(cet4List + cet6List)
# get dictionary of root words
rootDict = {}
wb = openpyxl.load_workbook('root words - raw.xlsx')
sheet = wb.active
for rowNum in range(2, sheet.max_row + 1):
rootDict[sheet.cell(row=rowNum, column=1).value] = sheet.cell(row=rowNum, column=2).value
# write to xls - root word to word (filter examples from Wikipedia)
##for rowNum in range(2, sheet.max_row + 1):
## examples = sheet.cell(row=rowNum, column=3).value
## exampleWords = examples.split(', ')
## exampleList = []
## for word in exampleWords:
## if word.lower() in wordList:
## exampleList += [word]
## sheet.cell(row=rowNum, column=3).value = ', '.join(exampleList)
##sheet.freeze_panes = 'A2' # freeze the header row - Row 1
# write to xls - word to root word
wb.create_sheet(index=1, title='CET4 Words')
wb.create_sheet(index=2, title='CET6 Words')
def populateSheet(sheetName, vocabList):
sheet = wb.get_sheet_by_name(sheetName)
sheet['A1'].value = 'WORDS'
sheet['B1'].value = 'POSSIBILE ROOTS'
sheet.freeze_panes = 'A2' # freeze the header row - Row 1
rowNum = 2
for word in vocabList:
sheet.cell(row=rowNum, column=1).value = word
exampleContent = ''
existingKeys = []
for key in rootDict.keys():
for root in key.split(', '):
if root.strip('-') in word and root.strip('-') not in ['a', 'e', 'i', 'o', 'u'] and key not in existingKeys:
exampleContent += (key + ' ===> ' + rootDict[key] + '\n')
existingKeys += [key]
exampleContent = exampleContent.rstrip('\n')
sheet.cell(row=rowNum, column=2).value = exampleContent
rowNum += 1
populateSheet('CET4 Words', cet4List)
populateSheet('CET6 Words', cet6List)
wb.save('roots and words.xlsx')
print('"roots and words.xlsx" generated.\nDon\'t forget to enable "自动换行".\nOpen it now? <y/n>')
if input() != 'n':
os.startfile('C:\\Users\\zs\\Documents\\PythonScripts\\roots and words.xlsx') # https://stackoverflow.com/questions/21191494/how-to-open-an-excel-file-with-python-to-display-its-content
print('Done.')
Изображения:
Исходная электронная таблица с необработанным контентом из Википедии:
Электронная таблица после программной фильтрации:
Электронная таблица после ручной сортировки в Excel: