среда, 31 июля 2013 г.

Linux Journal и немного Python

Добрый день.

Не так давно я приобрел годовую подписку на журнал Linux Journal. Пишут очень интересно, советую всем. Вместе с подпиской мне стали доступны все электронные версии журнала начиная с апреля 2005-го года. И я хотел бы с вами поделиться. Но было пару проблем:

1. Когда я скачивал их, то сначала не подумал и задал имена файлов в формате: ljмесяцгод.pdf, примерно: lj042005.pdf - это оказалось не удобно, так как номера шли совсем не по порядку.

2. Не охота переписывать вручную название выпусков, тем и прочего (к сожалению LJ далеко не с самого начала стали подписывать PDF версии, видно в списке.

Решил исправить эти проблемы с помощью Python.



Решение первой проблемы:


Я решил исправить имена файлов приведя их к виду: lj_год_месяц.pdf, вот такой код у меня получился:
import re # импортируем модуль для работы с регулярками
import os # импортируем модуль os
dir = os.getcwd() # получаем путь рабочей папки
pdf = os.listdir(dir) # выводим все содержимое этого каталога
reg = re.compile(r'(lj)(\d{2}|\w+)(\d{4})(\.pdf)') # компилируем регекс для пара старого имени
for file in pdf: # для всех файло в каталоге
    if file.startswith("lj") and file.endswith(".pdf"): # проверяем начинается ли с lj и заканчивается ли на .pdf, что бы ничего лишнего не переименовать
        name = reg.split(file) # разбиваем имя файла
        os.rename(file, name[1]+'_'+name[3]+'_'+name[2]+name[4]) # переименовываем в нужном нам порядке

Решение второй проблемы:


Надо было найти библиотеку для работы с PDF (pyPDF), не долго думая нашел на Stack Overflow ссылку на нужный модуль и небольшой пример, вот что у меня получилось:
import os # модуль os
from pyPdf import PdfFileReader # из pyPDF импортируем обьект PdfFileReader
dir = os.getcwd() # рабочий каталог
pdfs = os.listdir(dir) # содержимое каталога
info_file = open('info.txt', 'w') # создаем выходной файл
for file in pdfs: # для всех файлов
    if file.startswith("lj") and file.endswith(".pdf"): # проверка имени файла
        pdf_toread = PdfFileReader(open(file, 'rb')) # создаем объект PdfFileReader для каждого файла
        pdf_info = pdf_toread.getDocumentInfo() # Получаем нужную нам информацию из PDF
        info_file.write("<b>Filename:</b> " + file + "<br />") # выводим имя файла
        try: # для отлова ошибок, так как далеко не сразу есть нужные нам поля у pdf'ок
            info_file.write("<b>Title:</b> " + pdf_info['/Title'] + "<br />") # выводим Title
            info_file.write("<b>Subject:</b> " + pdf_info['/Subject'] + "<br />") # Subject
            info_file.write("<b>Keywords:</b> " + pdf_info['/Keywords'] + "<br />") #Keywords
        except: # если где-то возникла ошибка, то выводим переход на новую строку
            info_file.write("<br />")
        info_file.write("<br />")
info_file.close() # закрываем выходной файл
 Тэги: <b>, </b>, <br /> тут для того, что бы потом в blogger не выделять все жирным.

Всего 101 выпуск (1 бонусный).
Вот ссылка на mega каждый файл отдельно. Все архивом tar
Так, что прошу, пользуйтесь, читайте, очень интересно!


Filename: lj_2005_04.pdf
Title: Cover132_Final.qxd

Filename: lj_2005_05.pdf
Title: Cover126B_2.qxd

Filename: lj_2005_06.pdf

Filename: lj_2005_07.pdf
Title: Cover126B_2.qxd

Filename: lj_2005_08.pdf
Title: Cover126B_2.qxd

Filename: lj_2005_09.pdf
Title: Cover126B_2.qxd

Filename: lj_2005_10.pdf
Title: Cover126B_2.qxd

Filename: lj_2005_11.pdf

Filename: lj_2005_12.pdf
Title: Cover137final_v5.qxd


Filename: lj_2006_01.pdf
Title: Cover137final_v5.qxd

Filename: lj_2006_02.pdf
Title: Cover137final_v5.qxd

Filename: lj_2006_03.pdf
Title: Cover137final_v5.qxd

Filename: lj_2006_04.pdf
Title: untitled


Filename: lj_2006_05.pdf
Title: untitled

Filename: lj_2006_06.pdf
Title: untitled


Filename: lj_2006_07.pdf
Title: untitled

Filename: lj_2006_08.pdf
Title: untitled

Filename: lj_2006_09.pdf
Title: untitled

Filename: lj_2006_10.pdf
Title: untitled

Filename: lj_2006_11.pdf
Title: untitled

Filename: lj_2006_12.pdf
Title: untitled


Filename: lj_2007_01.pdf
Title: untitled


Filename: lj_2007_02.pdf
Title: untitled

Filename: lj_2007_03.pdf
Title: untitled

Filename: lj_2007_04.pdf
Title: untitled

Filename: lj_2007_05.pdf
Title: untitled

Filename: lj_2007_06.pdf
Title: untitled

Filename: lj_2007_07.pdf
Title: untitled

Filename: lj_2007_08.pdf
Title: untitled

Filename: lj_2007_09.pdf
Title: untitled

Filename: lj_2007_10.pdf
Title: untitled

Filename: lj_2007_11.pdf
Title: untitled

Filename: lj_2007_12.pdf
Title: untitled

Filename: lj_2008_01.pdf
Title: untitled

Filename: lj_2008_02.pdf
Title: untitled

Filename: lj_2008_03.pdf
Title: untitled

Filename: lj_2008_04.pdf
Title: untitled

Filename: lj_2008_05.pdf
Title: untitled

Filename: lj_2008_06.pdf
Title: untitled

Filename: lj_2008_07.pdf
Title: untitled

Filename: lj_2008_08.pdf
Title: untitled

Filename: lj_2008_09.pdf
Title: untitled

Filename: lj_2008_10.pdf
Title: untitled

Filename: lj_2008_11.pdf
Title: untitled

Filename: lj_2008_12.pdf
Title: untitled

Filename: lj_2009_01.pdf
Title: Linux Journal | January 2009 | Issue 177

Filename: lj_2009_02.pdf
Title: Linux Journal | February 2009 | Issue 178

Filename: lj_2009_03.pdf
Title: untitled

Filename: lj_2009_04.pdf
Title: Linux Journal | April 2009 | Issue 180

Filename: lj_2009_05.pdf
Title: Linux Journal | May 2009 | Issue 181

Filename: lj_2009_06.pdf
Title: Linux Journal | June 2009 | Issue 182

Filename: lj_2009_07.pdf
Title: Linux Journal | July 2009 | Issue 183

Filename: lj_2009_08.pdf
Title: Linux Journal | August 2009 | Issue 184

Filename: lj_2009_09.pdf
Title: Linux Journal | September 2009 | Issue 185

Filename: lj_2009_10.pdf
Title: Linux Journal | October 2009 | Issue 186

Filename: lj_2009_11.pdf
Title: Linux Journal | November 2009 | Issue 187

Filename: lj_2009_12.pdf
Title: Linux Journal | December 2009 | Issue 188

Filename: lj_2010_01.pdf
Title: Linux Journal | January 2010 | Issue 189

Filename: lj_2010_02.pdf
Title: Linux Journal | February 2010 | Issue 190

Filename: lj_2010_03.pdf
Title: Linux Journal | March 2010 | Issue 191

Filename: lj_2010_04.pdf
Title: Linux Journal | April 2010 | Issue 192

Filename: lj_2010_05.pdf
Title: Linux Journal | May 2010 | Issue 193

Filename: lj_2010_06.pdf
Title: Linux Journal | June 2010 | Issue 194

Filename: lj_2010_07.pdf
Title: Linux Journal | July 2010 | Issue 195

Filename: lj_2010_08.pdf
Title: Linux Journal | August 2010 | Issue 196

Filename: lj_2010_09.pdf
Title: untitled

Filename: lj_2010_10.pdf
Title: untitled

Filename: lj_2010_11.pdf
Title: Linux Journal | November 2010 | Issue 199

Filename: lj_2010_12.pdf
Title: untitled

Filename: lj_2011_01.pdf
Title: Linux Journal | January 2011 | Issue 201

Filename: lj_2011_02.pdf
Title: Linux Journal | February 2011 | Issue 202

Filename: lj_2011_03.pdf
Title: Linux Journal | March 2011 | Issue 203

Filename: lj_2011_04.pdf
Title: Linux Journal | April 2011 | Issue 204

Filename: lj_2011_05.pdf
Title: Linux Journal | May 2011 | Issue 205

Filename: lj_2011_06.pdf
Title: Linux Journal | June 2011 | Issue 206

Filename: lj_2011_07.pdf
Title: Linux Journal | July 2011 | Issue 207

Filename: lj_2011_08.pdf
Title: Linux Journal | August 2011 | Issue 208

Filename: lj_2011_09.pdf
Title: Linux Journal | September 2011 | Issue 209

Filename: lj_2011_10.pdf
Title: Linux Journal | October 2011 | Issue 210
Subject: Networking
Keywords: Mustache.js, ipset, Lustre, tcpdump, ENet, SSDs

Filename: lj_2011_11.pdf
Title: Linux Journal | November 2011 | Issue 211
Subject: HACK THIS
Keywords: OLPC, Arduino, Trim-Slice, vDSO, Elmer, MPD

Filename: lj_2011_12.pdf
Title: Linux Journal | December 2011 | Issue 212
Subject: Readers' Choice Awards 2011
Keywords: EFI, OpenRISC, Mercurial, Netfilter, SQS, Databases

Filename: lj_2012_01.pdf
Title: Linux Journal | January 2012 | Issue 213
Subject: Security
Keywords: KeePassX, OAuth, ELF, SlickEdit, EFI, Metasploit

Filename: lj_2012_02.pdf
Title: Linux Journal | February 2012 | Issue 214
Subject: Web Development
Keywords: Sinatra, HTML5, Catalyst, Drupal 7, Moodle, Stephen Wolfram, Mathematica, Perl

Filename: lj_2012_03.pdf
Title: Linux Journal | March 2012 | Issue 215
Subject: Mobile
Keywords: Logging, IRC, Plasma Active, Linode, EFI, GSL

Filename: lj_2012_04.pdf
Title: Linux Journal | April 2012 | Issue 216
Subject: System Administration
Keywords: OpenLDAP, Pacemaker, Watson, Puppet, Nagios, EFI, APIs, LTSP, sar

Filename: lj_2012_05.pdf
Title: Linux Journal | May 2012 | Issue 217
Subject: Programming
Keywords: Lua, App Inventor, LTSP, Pure Data, Pd, C, Python, DRBD, Pacemaker, iftop, ZaReason, Valta X79

Filename: lj_2012_06.pdf
Title: Linux Journal | June 2012 | Issue 218
Subject: Cool Projects
Keywords: Linux, Twitter Bootstrap, ownCloud, ZFS and Btrfs, 3-D Printers, Animation, Video, Home Automation, Polywell i2303

Filename: lj_2012_07.pdf
Title: Linux Journal | July 2012 | Issue 219
Subject: Networking
Keywords: Pry, TCP, PirateBox, 3-D Printing, OpenLDAP, Webmin, UML network

Filename: lj_2012_08.pdf
Title: Linux Journal | August 2012 | Issue 220
Subject: Linux At Work
Keywords: LZO Compression, Vagrant, Raspberry Pi, Samba, Tarsnap, N900, Hadoop, Doc Searls, The Intention Economy, Linux

Filename: lj_2012_09.pdf
Title: Linux Journal | September 2012 | Issue 221
Subject: Embedded
Keywords: PL/R, DNS, Arduino, Logitech, Squeezebox, NVM, Telnet, ZaReason, ZaTab, Bash, R Language, PostgreSQL, Statistical Analysis, Linux

Filename: lj_2012_10.pdf
Title: Linux Journal | October 2012 | Issue 222
Subject: The Kernel
Keywords: Chrome, Kbuild, Android, Linux Training, JaxoDraw, Canaries, Kernel, Bash Shell Scripts, Linux

Filename: lj_2012_11.pdf
Title: Linux Journal | November 2012 | Issue 223
Subject: Python
Keywords: Chrome, GlusterFS, Salt Stack, PostGIS, PostgreSQL, Sympy, Bash, Linux

Filename: lj_2012_12.pdf
Title: Linux Journal | December 2012 | Issue 224
Subject: 2012 Readers' Choice Awards
Keywords: Nexus 7, Raspberry Pi, GIMP 2.8, Grive, grsync, NCL, Linux

Filename: lj_2012_bonus.pdf
Title: Linux Journal | Drupal Issue | Special Supplement
Subject: Drupal
Keywords: Drupal, Linux, Open-Source, Trekk, usenix.org, Open Atrium

Filename: lj_2013_01.pdf
Title: Linux Journal | January 2013 | Issue 225
Subject: Security
Keywords: Web Sockets, PXE, OTPW, Wi-Fi Honeypots, ECC, Phonegap, Linux

Filename: lj_2013_02.pdf
Title: Linux Journal | February 2013 | Issue 226
Subject: System Administration
Keywords: SQLAlchemy, ConVirt, Fabric, Azure, Raspberry Pi, R Packages, Android, Linux

Filename: lj_2013_03.pdf
Title: Linux Journal | March 2013 | Issue 227
Subject: Web Development
Keywords: Watir, Android, Salt Stack, Drupal, Varnish, Google, Dart, Ruby, Vagrant, Linux

Filename: lj_2013_04.pdf
Title: Linux Journal | April 2013 | Issue 228
Subject: High-Performance Computing
Keywords: Opendedup, IPython, SciPy, MapReduce, Cloud, Web Security, HPC Applications

Filename: lj_2013_05.pdf
Title: Linux Journal | May 2013 | Issue 229
Subject: Raspberry Pi
Keywords: Sidekiq, IPv6, Compliance, Oregano, RPi Clusters, The Cloud, Google Reader

Filename: lj_2013_06.pdf
Title: Linux Journal | June 2013 | Issue 230
Subject: Android
Keywords: Unicode, AIDE, Nexus 7, Linux Worms, RPi, DevOps, MultiROM, Mining Cryptocurrency, Android

Filename: lj_2013_07.pdf
Title: Linux Journal | July 2013 | Issue 231
Subject: Networking
Keywords: Clojure, IPv6, DNSSEC, Routing, Tomcat, Spyder, Scientific Python Code, Samsung ARM Chromebook 3G, Linux

Комментариев нет:

Отправить комментарий