У меня есть текстовый файл bk.txt
, который выглядит следующим образом:
file 'wave bass 1.aif'
file 'wave bass 10.aif'
file 'wave bass 11.aif'
file 'wave bass 12.aif'
file 'wave bass 13.aif'
file 'wave bass 14.aif'
file 'wave bass 15.aif'
file 'wave bass 16.aif'
file 'wave bass 2.aif'
file 'wave bass 3.aif'
file 'wave bass 4.aif'
file 'wave bass 5.aif'
file 'wave bass 6.aif'
file 'wave bass 7.aif'
file 'wave bass 8.aif'
file 'wave bass 9.aif'
file 'wave effect 1.aif'
file 'wave effect 2.aif'
file 'wave effect 3.aif'
file 'wave effect 4.aif'
file 'wave effect 5.aif'
file 'wave effect 6.aif'
file 'wave effect 7.aif'
file 'wave effect 8.aif'
file 'wave hit 1.aif'
file 'wave hit 10.aif'
Я пытаюсь отсортировать файл построчно в алфавитном порядке и сохранить результаты в новый файл, я пытался пара различных методов сортировки, таких как это ниже:
fn = songsFilepath + "bk.txt"
sorted_fn = songsFilepath + "bkSorted.txt"
with open(fn,'r') as first_file:
rows = first_file.readlines()
sorted_rows = sorted(rows, key=lambda x: int(x.split()[0]), reverse=False)
with open(sorted_fn,'w') as second_file:
for row in sorted_rows:
second_file.write(row)
Но всякий раз, когда я запускаю код, я получаю сообщение об ошибке, говоря о недопустимом литерале для int (0 с основанием 10 в 'file'
Traceback (most recent call last):
File "commandLineMusicVideo/__init__.py", line 213, in <module>
fullAlbum(songsFilepath, audioFormat, imageFilepath, outputResolution)
File "commandLineMusicVideo/__init__.py", line 87, in fullAlbum
sorted_rows = sorted(rows, key=lambda x: int(x.split()[0]), reverse=False)
File "commandLineMusicVideo/__init__.py", line 87, in <lambda>
sorted_rows = sorted(rows, key=lambda x: int(x.split()[0]), reverse=False)
ValueError: invalid literal for int() with base 10: 'file'
Я знаю, что это немного необычный текстовый файл на заказ, но есть ли что-то неправильное в моем коде сортировки, из-за которого файл не читается / не сортируется в новый файл?
Спасибо
РЕДАКТИРОВАНИЕ РЕДАКТИРОВАНИЕ РЕДАКТИРОВАНИЕ
Работа над исправлением, предложенным Патриком, текущий python код:
fn = songsFilepath + "bk.txt"
sorted_fn = songsFilepath + "bkSorted.txt"
with open(fn,'r') as first_file:
rows = first_file.readlines()
#sort 1
sorted_rows = sorted(rows, key=lambda x: (x.strip().split()[:3],int(x.strip().split()[-1].split(".")[0])), reverse=False)
#sort 2, change the sorting function to take the last split and split before the .
sorted_rows = sorted(rows, key = lambda x: int(x.strip().split()[-1].split(".")[0]), reverse = False)
#write results to file
with open(sorted_fn,'w') as second_file:
for row in sorted_rows:
second_file.write(row)
print('finished sorted = ')
print(open(sorted_fn).read())
Я пытаюсь реализовать сортировку дуэлей, необходимую для получения оптимального отсортированного результата, но в настоящее время смотрю на предполагаемый вид:
file 'wave bass 1.aif'
file 'wave effect 1.aif'
file 'wave hit 1.aif'
file 'wave tone 1.aif'
file 'wave bass 2.aif'
file 'wave effect 2.aif'
file 'wave tone 2.aif'
file 'wave bass 3.aif'
file 'wave effect 3.aif'
file 'wave hit 3.aif'
file 'wave tone 3.aif'
file 'wave bass 4.aif'
file 'wave effect 4.aif'
file 'wave hit 4.aif'
file 'wave tone 4.aif' ```