Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 7, 2016 12:57:49

Sarge_Serge
Зарегистрирован: 2016-12-07
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться. Работа с файлами.

Всем привет! В программировании без году неделя. Изучаю самостоятельно.
Задал сам себе задачу и не могу до конца ее реализовать уже второй день.
Суть задачи в том, чтобы из файла с закладками Хрома вытащить все закладки (пока без ссылок) и красиво уложить их новый файл, который был бы читабельным. Изначально я хотел написать код для создания файла с сохраняемыми в него всеми закладками, которые когда-либо добавлялись (даже после удаления их из закладок в браузере), но как это сделать пока не знаю (если натолкнете на мысль, буду признателен).
А пока я не могу сделать так, чтобы после замены “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)

Прикреплённый файлы:
attachment Заголовок.png (149,5 KБ)

Офлайн

#2 Дек. 7, 2016 13:15:28

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10010
Репутация: +  857  -
Профиль   Отправить e-mail  

Помогите разобраться. Работа с файлами.

C:\Users\acer-pc\AppData\Local\Google\Chrome\User Data\Default\Bookmarks
Вот этот файл приложи к сообщению. Не у всех есть Chrome.



Офлайн

#3 Дек. 7, 2016 13:31:21

Sarge_Serge
Зарегистрирован: 2016-12-07
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться. Работа с файлами.

py.user.next
Ок, прикрепил тут.

Прикреплённый файлы:
attachment Bookmarks (2,6 KБ)

Офлайн

#4 Дек. 7, 2016 13:48:12

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10010
Репутация: +  857  -
Профиль   Отправить e-mail  

Помогите разобраться. Работа с файлами.

Это json-файл, надо использовать модуль json.



Офлайн

#5 Дек. 7, 2016 13:58:53

Sarge_Serge
Зарегистрирован: 2016-12-07
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться. Работа с файлами.

py.user.next
Это json-файл, надо использовать модуль json.
Но и без модуля пока работает. Вопрос как после замены “name” на “заголовок” вывести в файл построчно закладки, а не посимвольно.

Офлайн

#6 Дек. 7, 2016 14:08:59

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10010
Репутация: +  857  -
Профиль   Отправить e-mail  

Помогите разобраться. Работа с файлами.

Вот я тебе переделал свой скрипт с 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()

У меня скрипт более продвинут: сохраняет не закладки, а открытые в данный момент вкладки; и сохраняет их в text-формат, в html-формат и в org-формат по выбору. Последним и пользуюсь, так как ссылки легко переставлять местами и отмечать посещённые. Музыку открыл на YouTube, скрипт запустил - и все песни лежат в удобном файлике.



Отредактировано py.user.next (Дек. 7, 2016 14:15:47)

Офлайн

#7 Дек. 7, 2016 14:19:43

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Помогите разобраться. Работа с файлами.

все правильно ваша программа делает, 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)

Офлайн

#8 Дек. 7, 2016 14:49:47

Sarge_Serge
Зарегистрирован: 2016-12-07
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться. Работа с файлами.

PEHDOM
все правильно ваша программа делает, re вам возавращает список, а потом
вы ее в строку преобразуете феерично конструкцией str(results) и получаете строку с квадратными скобками, запятыми и прочим, заменяете в ней все “name” на заголовок но на выходе получаете строку. А потомы вы вдруг хотите чтобы строка вела себя как список, фором перебираете элементы но у вас же строка, тоесть фор возвращает символы строки поштучно.
Вот такая конструкция должна правильно работать

Спасибо! Это то, что нужно! Немного подредактировал ваш код и все получилось! Я понимал, что итерирую строку и поэтому получаю вывод посимвольно, но как сделать правильно не знал.

Теперь поломаю голову над тем, как создать историю закладок. То есть оставлять уже имеющиеся, добвлять новые, но при этом оставлять файл без изменений, если закладки из браузера были удалены.

Офлайн

#9 Дек. 7, 2016 14:50:42

Sarge_Serge
Зарегистрирован: 2016-12-07
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться. Работа с файлами.

py.user.next
Вот я тебе переделал свой скрипт с Firefox'а на Chrome

Спасибо! Но для меня это очень сложно пока) А идея мне понравилась!

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version