Форум сайта python.su
0
Всем привет! В программировании без году неделя. Изучаю самостоятельно.
Задал сам себе задачу и не могу до конца ее реализовать уже второй день.
Суть задачи в том, чтобы из файла с закладками Хрома вытащить все закладки (пока без ссылок) и красиво уложить их новый файл, который был бы читабельным. Изначально я хотел написать код для создания файла с сохраняемыми в него всеми закладками, которые когда-либо добавлялись (даже после удаления их из закладок в браузере), но как это сделать пока не знаю (если натолкнете на мысль, буду признателен).
А пока я не могу сделать так, чтобы после замены “name” на “заголовок” в файл шла запись закладок ПОСТРОЧНО. До замены все работает хорошо. В связи с тем, что тип переменный results является строкой (если не строка, то выдает исключение), запись в файл происходит посимвольно. А мне нужно построчно для каждой закладки. Спасибо за поддержку зелёных тридцатилетних программеров)))) 
import os
import shutil
import re
# копируем файл закладок из папки гугл в корень диска D.
shutil.copy(r'C:\Users\acer-pc\AppData\Local\Google\Chrome\User Data\Default\Bookmarks', r'D:\Bookmarks.txt')
#открываю старый скопированный файл и создаю новый файл для дальнейшей записи.
bookmarks_new = open(r'D:\Bookmarks.txt', mode = ‘r’, encoding = ‘UTF-8’)
bookmarks_new2 = open(r'D:\Bookmarks2.txt', mode = ‘w’, encoding = ‘UTF-8’)
#присваиваю значение переменной открытие файла
my_bookmarks = bookmarks_new.read()
#поиск в файле и присваивание результатов в переменную results. Запись в файл результатов выборки построчно.
only_bookmarks = r“\”name\":.*“
results = re.findall(only_bookmarks, my_bookmarks)
#results = re.sub('”name“', ”заголовок“, str(results)) закомментил для нормальной работы
for header in results:
print (header)
bookmarks_new2.write(header + ”\n“)
В файле получаем следующее:
”name“: ”Puzzle English. Изучение английского языка онлайн.“
”name“: ”Lutc_M._-_Izuchaem_Python_(4-e_izdanie)-_2011.pdf“
”name“: ”Создание GUI на Python с помощью библиотеки Tkinter. Программирование для начинающих“
”name“: ”Программирование на python: Задачи (Следующее четное)“
”name“: ”Курс: Д. П. Кириенко. Программирование на языке Python (школа 179 г. Москвы)“
”name“: ”Pythonicway - Работа с файлами в Python“
”name“: ”Панель закладок“
”name“: ”Другие закладки“
”name“: ”Закладки на мобильном“
Повторюсь, что после замены name на э”заголовок" выходит построчно.. типа того:
з
а
г
о
л
… и так далеевесь текст
Отредактировано Sarge_Serge (Дек. 7, 2016 13:11:47)
Прикреплённый файлы:
Заголовок.png (149,5 KБ)
Офлайн
857
C:\Users\acer-pc\AppData\Local\Google\Chrome\User Data\Default\Bookmarks
Офлайн
0
py.user.nextОк, прикрепил тут.
Прикреплённый файлы:
Bookmarks (2,6 KБ)
Офлайн
857
Это json-файл, надо использовать модуль json.
Офлайн
0
py.user.nextНо и без модуля пока работает. Вопрос как после замены “name” на “заголовок” вывести в файл построчно закладки, а не посимвольно.
Это json-файл, надо использовать модуль json.
Офлайн
857
Вот я тебе переделал свой скрипт с Firefox'а на Chrome
#!/usr/bin/env python3 import json def get_json_data(fname): """Load json-data from file on file system.""" with open(fname, encoding='utf-8') as fin: return json.load(fin) def get_chrome_title_url_pairs(data): """Select title and url pairs from Chrome json data.""" for section in data['roots'].values(): for entry in section['children']: yield entry['name'], entry['url'] def strings_to_file(fname, seq): """Save strings from sequence to the file on file system.""" with open(fname, 'w', encoding='utf-8') as fout: for i in seq: print(i, file=fout) def text_to_file(fname, text): """Save text to the file on file system.""" with open(fname, 'w', encoding='utf-8') as fout: fout.write(text) def convert_chrome_to_txt(ifname, ofname): """Convert Chrome bookmarks to the text file with title and urls.""" chrurls = get_chrome_title_url_pairs(get_json_data(ifname)) tustrs = ('{}\n{}'.format(t, u) for t, u in chrurls) strings_to_file(ofname, tustrs) def main(): convert_chrome_to_txt('Bookmarks', 'bookmarks.txt') if __name__ == '__main__': main()
Отредактировано py.user.next (Дек. 7, 2016 14:15:47)
Офлайн
294
все правильно ваша программа делает, re вам возавращает список, а потом
вы ее в строку преобразуете феерично конструкцией str(results) и получаете строку с квадратными скобками, запятыми и прочим, заменяете в ней все “name” на заголовок но на выходе получаете строку. А потомы вы вдруг хотите чтобы строка вела себя как список, фором перебираете элементы но у вас же строка, тоесть фор возвращает символы строки поштучно.
Вот такая конструкция должна правильно работать
import os import shutil import re # копируем файл закладок из папки гугл в корень диска D. #shutil.copy('C:\Users\acer-pc\AppData\Local\Google\Chrome\User Data\Default\Bookmarks', 'D:\Bookmarks.txt') #открываю старый скопированный файл и создаю новый файл для дальнейшей записи. bookmarks_new = open('Bookmarks', mode = 'r', encoding = 'UTF-8') bookmarks_new2 = open('Bookmarks2.txt', mode = 'w', encoding = 'UTF-8') #присваиваю значение переменной открытие файла my_bookmarks = bookmarks_new.read() #поиск в файле и присваивание результатов в переменную results. Запись в файл результатов выборки построчно. only_bookmarks = '"name":.*' results = re.findall(only_bookmarks, my_bookmarks) for i in range(len(results)): results[i] = re.sub('"name"', 'заголовок', results[i]) #закомментил для нормальной работы for header in results: print(header) bookmarks_new2.write(header + '\n') bookmarks_new2.close()
[code python][/code]
Отредактировано PEHDOM (Дек. 7, 2016 14:31:41)
Офлайн
0
PEHDOM
все правильно ваша программа делает, re вам возавращает список, а потом
вы ее в строку преобразуете феерично конструкцией str(results) и получаете строку с квадратными скобками, запятыми и прочим, заменяете в ней все “name” на заголовок но на выходе получаете строку. А потомы вы вдруг хотите чтобы строка вела себя как список, фором перебираете элементы но у вас же строка, тоесть фор возвращает символы строки поштучно.
Вот такая конструкция должна правильно работать
Офлайн
0
py.user.next
Вот я тебе переделал свой скрипт с Firefox'а на Chrome
Офлайн