<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="http://wiki2.linuxformat.ru/skins/common/feed.css?97"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://wiki2.linuxformat.ru/index.php?action=history&amp;feed=atom&amp;title=LXF97%3APython</id>
		<title>LXF97:Python - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://wiki2.linuxformat.ru/index.php?action=history&amp;feed=atom&amp;title=LXF97%3APython"/>
		<link rel="alternate" type="text/html" href="http://wiki2.linuxformat.ru/index.php?title=LXF97:Python&amp;action=history"/>
		<updated>2026-05-13T20:50:11Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.11.1</generator>

	<entry>
		<id>http://wiki2.linuxformat.ru/index.php?title=LXF97:Python&amp;diff=5644&amp;oldid=prev</id>
		<title>Crazy Rebel: /* Python и музон */</title>
		<link rel="alternate" type="text/html" href="http://wiki2.linuxformat.ru/index.php?title=LXF97:Python&amp;diff=5644&amp;oldid=prev"/>
				<updated>2008-11-27T06:29:51Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Python и музон&lt;/span&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 06:29, 27 ноября 2008&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 66:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 66:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;=== Python и музон ===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;=== Python и музон ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;code&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;source lang=python&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; import os&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; import os&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; topdir=&amp;quot;/usr/share/music/&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; topdir=&amp;quot;/usr/share/music/&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 78:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 78:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;     for entry in dirs[1]:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;     for entry in dirs[1]:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;       print dirs[1]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;       print dirs[1]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;code&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;source&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;В данном примере мы сначала импортируем модуль os, затем&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;В данном примере мы сначала импортируем модуль os, затем&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 86:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 86:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;walklist должны выглядеть примерно так:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;walklist должны выглядеть примерно так:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;code&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;source lang=python&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; ('/usr/share/music/Blonde_Redhead', ['1980 Forward', '23'], [])&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; ('/usr/share/music/Blonde_Redhead', ['1980 Forward', '23'], [])&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; ('/usr/share/music/Blonde_RedHead/1980 Forward', [], ['18-Magic&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; ('/usr/share/music/Blonde_RedHead/1980 Forward', [], ['18-Magic Mountain.mp3'])&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt; &lt;/del&gt;Mountain.mp3'])&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; ('/usr/share/music/Blonde_Redhead/23', [], ['10-My Impure Hair.mp3','1-23.mp3', '7-Publisher.mp3', '3-The Dress.mp3', '6-Silently.mp3'])&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; ('/usr/share/music/Blonde_Redhead/23', [], ['10-My Impure Hair.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;source&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt; &lt;/del&gt;mp3','1-23.mp3', '7-Publisher.mp3', '3-The Dress.mp3', '6-Silently.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt; &lt;/del&gt;mp3'])&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;code&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Теперь пошагово проверим каждую строку. Если элемент строки&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Теперь пошагово проверим каждую строку. Если элемент строки&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 123:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 120:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;примет такой вид:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;примет такой вид:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;code&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;source lang=python&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; for file in dirs[2]:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; for file in dirs[2]:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;   fullpath = os.path.join(dirs[0],file)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;   fullpath = os.path.join(dirs[0],file)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 139:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 136:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;     # Что-нибудь с ним сделаем.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;     # Что-нибудь с ним сделаем.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;     print fullpath&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;     print fullpath&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;code&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;source&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Мы также должны объявить три переменных типа «список» в&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Мы также должны объявить три переменных типа «список» в&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 166:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 163:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;файла, и выглядит это примерно так:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;файла, и выглядит это примерно так:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;code&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;source lang=python&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; mytag=eyeD3.Tag()&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; mytag=eyeD3.Tag()&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; mytag.link('/usr/share/music/Blonde_Redhead/23/1-23.mp3')&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; mytag.link('/usr/share/music/Blonde_Redhead/23/1-23.mp3')&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 172:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 169:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; print mytag.getAlbum()&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; print mytag.getAlbum()&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; print mytag.getTrackNum()&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; print mytag.getTrackNum()&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;code&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;source&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Изменив любой из тэгов, просто вызовите метод tag.update(), и&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Изменив любой из тэгов, просто вызовите метод tag.update(), и&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 226:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 223:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;браться и позже, не затрагивая основной код.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;браться и позже, не затрагивая основной код.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;code&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;source lang=python&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; if (extension !='.mp3'):&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; if (extension !='.mp3'):&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;   # Не файл MP3? Проверить на другие расширения?&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;   # Не файл MP3? Проверить на другие расширения?&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 293:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 290:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;     # Выдадим предупреждение&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;     # Выдадим предупреждение&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;     logger.warn(&amp;quot; file %s does not seem to be a valid mp3 file&amp;quot;,fullpath)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;     logger.warn(&amp;quot; file %s does not seem to be a valid mp3 file&amp;quot;,fullpath)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;code&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;source&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Полная распечатка этого небольшого скрипта представлена на&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Полная распечатка этого небольшого скрипта представлена на&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 346:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 343:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;скрипта:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;скрипта:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;code&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;source lang=python&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; logger = logging.getLogger(&amp;quot;pymusic&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; logger = logging.getLogger(&amp;quot;pymusic&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; # Создать обработчик консоли&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; # Создать обработчик консоли&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 356:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 353:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; logger.addHandler(handler)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; logger.addHandler(handler)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; logger.setLevel(logging.WARN)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; logger.setLevel(logging.WARN)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;code&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;source&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Часть этих штук смахивает на волшебство, и кое-кто считает модуль ведения журнала непостижимым, но на самом деле все очень просто. Если вы хотите узнать больше, документация&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Часть этих штук смахивает на волшебство, и кое-кто считает модуль ведения журнала непостижимым, но на самом деле все очень просто. Если вы хотите узнать больше, документация&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;находится здесь: http://docs.python.org/lib/module-logging.html. Фактически, всё, что необходимо&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;находится здесь: http://docs.python.org/lib/module-logging.html. Фактически, всё, что необходимо&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Crazy Rebel</name></author>	</entry>

	<entry>
		<id>http://wiki2.linuxformat.ru/index.php?title=LXF97:Python&amp;diff=5340&amp;oldid=prev</id>
		<title>Crazy Rebel в 07:33, 17 ноября 2008</title>
		<link rel="alternate" type="text/html" href="http://wiki2.linuxformat.ru/index.php?title=LXF97:Python&amp;diff=5340&amp;oldid=prev"/>
				<updated>2008-11-17T07:33:27Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 07:33, 17 ноября 2008&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Категория:Учебники]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;== Python: Управляемся ==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;== Python: Управляемся ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;''Надоело мириться с дезориентирующими тэгами и нелепыми именами файлов?&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;: &lt;/ins&gt;''Надоело мириться с дезориентирующими тэгами и нелепыми именами файлов? Укодируйте их до полного исчезновения с помощью '''Ника Вейча''' и магии Python!''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Укодируйте их до полного исчезновения с помощью '''Ника Вейча''' и магии Python!''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Правда-правда, я ужасно люблю порядок: все вещи на своем&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Правда-правда, я ужасно люблю порядок: все вещи на своем&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Crazy Rebel</name></author>	</entry>

	<entry>
		<id>http://wiki2.linuxformat.ru/index.php?title=LXF97:Python&amp;diff=4528&amp;oldid=prev</id>
		<title>Lockal: восстановление кавычек в коде  AWB</title>
		<link rel="alternate" type="text/html" href="http://wiki2.linuxformat.ru/index.php?title=LXF97:Python&amp;diff=4528&amp;oldid=prev"/>
				<updated>2008-04-27T14:43:17Z</updated>
		
		<summary type="html">&lt;p&gt;восстановление кавычек в коде  &lt;a href=&quot;/index.php?title=Linuxformat:AutoWikiBrowser&amp;amp;action=edit&quot; class=&quot;new&quot; title=&quot;Linuxformat:AutoWikiBrowser&quot;&gt;AWB&lt;/a&gt;&lt;/p&gt;
&lt;a href=&quot;http://wiki2.linuxformat.ru/index.php?title=LXF97:Python&amp;amp;diff=4528&amp;amp;oldid=2795&quot;&gt;(Различия между версиями)&lt;/a&gt;</summary>
		<author><name>Lockal</name></author>	</entry>

	<entry>
		<id>http://wiki2.linuxformat.ru/index.php?title=LXF97:Python&amp;diff=2795&amp;oldid=prev</id>
		<title>OWeRQ в 23:45, 19 марта 2008</title>
		<link rel="alternate" type="text/html" href="http://wiki2.linuxformat.ru/index.php?title=LXF97:Python&amp;diff=2795&amp;oldid=prev"/>
				<updated>2008-03-19T23:45:51Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 23:45, 19 марта 2008&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 246:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 246:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;     if b and not a:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;     if b and not a:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;       # Имеется только тэг ID3v1&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;       # Имеется только тэг ID3v1&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;       &lt;/ins&gt;print “version1 only”&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;       &lt;/ins&gt;# Создать информацию для tag2 по tag1&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;print “version1 only”&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;       &lt;/ins&gt;print fullpath&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;# Создать информацию для tag2 по tag1&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;       &lt;/ins&gt;artist = tag1.getArtist()&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;print fullpath&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;       &lt;/ins&gt;album = tag1.getAlbum()&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;artist = tag1.getArtist()&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;       &lt;/ins&gt;title = tag1.getTitle()&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;album = tag1.getAlbum()&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;       &lt;/ins&gt;print artist,album,title&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;title = tag1.getTitle()&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;       &lt;/ins&gt;tag1.update(eyeD3.ID3_V2)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;print artist,album,title&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;       &lt;/ins&gt;# check tags are cool&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;tag1.update(eyeD3.ID3_V2)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;     &lt;/ins&gt;elif a and not b:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;# check tags are cool&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;       &lt;/ins&gt;# Имеется только тэг ID3v2&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;elif a and not b:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;       &lt;/ins&gt;print fullpath&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;# Имеется только тэг ID3v2&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;       &lt;/ins&gt;artist = tag2.getArtist()&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;print fullpath&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;       &lt;/ins&gt;album = tag2.getAlbum()&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;artist = tag2.getArtist()&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;       &lt;/ins&gt;title = tag2.getTitle()&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;album = tag2.getAlbum()&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;       &lt;/ins&gt;print artist,album,title&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;title = tag2.getTitle()&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;       &lt;/ins&gt;try:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;print artist,album,title&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;         &lt;/ins&gt;tag2.update(eyeD3.ID3_V1_1)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;try:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;       &lt;/ins&gt;except UnicodeEncodeError:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;tag2.update(eyeD3.ID3_V1_1)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;         &lt;/ins&gt;logger.error(“tag invalid for v1.1 in file %s”, fullpath)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;except UnicodeEncodeError:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;     &lt;/ins&gt;elif a and b:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;logger.error(“tag invalid for v1.1 in file %s”,&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;       &lt;/ins&gt;# Имеются оба тэга&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;fullpath)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;       &lt;/ins&gt;logger.info( “both versions fine %s”, fullpath)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;elif a and b:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;     &lt;/ins&gt;else:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;# Имеются оба тэга&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;       &lt;/ins&gt;# Тэгов нет вообще&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;logger.info( “both versions fine %s”, fullpath)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;       &lt;/ins&gt;logger.warn(‘this file has no tags! %s’, fullpath)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;else:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;       &lt;/ins&gt;error_flag = True&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;# Тэгов нет вообще&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;       &lt;/ins&gt;# М.б. удастся вытянуть что-нибудь из имени каталога, где сидит файл!&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;logger.warn(‘this file has no tags! %s’, fullpath)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;     &lt;/ins&gt;if not error_flag:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;error_flag = True&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;       &lt;/ins&gt;# Пускай имя файла будет&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;# М.б. удастся вытянуть что-нибудь из имени&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;       &lt;/ins&gt;# number-name.mp3&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;каталога, где сидит файл!&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;       &lt;/ins&gt;title=tag2.getTitle()&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;if not error_flag:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;       &lt;/ins&gt;title = title.replace(‘ ‘,’_’)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;# Пускай имя файла будет&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;       &lt;/ins&gt;n=tag2.getTrackNum()&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;# number-name.mp3&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;       &lt;/ins&gt;# Номер (number) у нас есть&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;title=tag2.getTitle()&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;       &lt;/ins&gt;ns = str(n[0])&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;title = title.replace(‘ ‘,’_’)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;       &lt;/ins&gt;if len(ns)==1:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;n=tag2.getTrackNum()&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;           &lt;/ins&gt;ns= ‘0’+ns&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;# Номер (number) у нас есть&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;     &lt;/ins&gt;ns=ns+’-’+title+’.mp3’&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;ns = str(n[0])&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;     &lt;/ins&gt;# Уберем нехорошие символы&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;if len(ns)==1:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;     &lt;/ins&gt;ns=sanitize(ns)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;ns= ‘0’+ns&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;     &lt;/ins&gt;if (file!=ns):&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;ns=ns+’-’+title+’.mp3’&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;       &lt;/ins&gt;logger.info(“change filename suggested for %s, to %s!”,filename,ns)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;# Уберем нехорошие символы&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;       &lt;/ins&gt;os.rename(fullpath, os.path.join(dirs[0],ns)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;ns=sanitize(ns)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;   &lt;/ins&gt;else:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;if (file!=ns):&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;     &lt;/ins&gt;# Выдадим предупреждение&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;logger.info(“change filename suggested for %s, to&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;     &lt;/ins&gt;logger.warn(“ file %s does not seem to be a valid mp3 file”,fullpath)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;%s!”,filename,ns)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;os.rename(fullpath, os.path.join(dirs[0],ns)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;else:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;# Выдадим предупреждение&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;logger.warn(“ file %s does not seem to be a valid mp3&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;file”,fullpath)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/code&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/code&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>OWeRQ</name></author>	</entry>

	<entry>
		<id>http://wiki2.linuxformat.ru/index.php?title=LXF97:Python&amp;diff=2794&amp;oldid=prev</id>
		<title>OWeRQ: Новая: == Python: Управляемся == ''Надоело мириться с дезориентирующими тэгами и нелепыми именами файлов? Укодиру...</title>
		<link rel="alternate" type="text/html" href="http://wiki2.linuxformat.ru/index.php?title=LXF97:Python&amp;diff=2794&amp;oldid=prev"/>
				<updated>2008-03-19T23:40:47Z</updated>
		
		<summary type="html">&lt;p&gt;Новая: == Python: Управляемся == ''Надоело мириться с дезориентирующими тэгами и нелепыми именами файлов? Укодиру...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая статья&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Python: Управляемся ==&lt;br /&gt;
''Надоело мириться с дезориентирующими тэгами и нелепыми именами файлов?&lt;br /&gt;
Укодируйте их до полного исчезновения с помощью '''Ника Вейча''' и магии Python!''&lt;br /&gt;
&lt;br /&gt;
Правда-правда, я ужасно люблю порядок: все вещи на своем&lt;br /&gt;
месте, все под рукой, и вы можете мигом определить, что&lt;br /&gt;
есть, чего нет; и всякое такое. Впрочем, люди, видевшие фото&lt;br /&gt;
моего рабочего стола или совавшие нос в мой бельевой ящик, пожалуй, оторопеют от явной лживости этого высказывания. Но, пожалуйста, внимательно прочтите его еще раз: я сказал, что люблю порядок, а&lt;br /&gt;
вовсе не что я люблю его наводить. Моя мечта – чтобы во всех комнатах моего дома стояло по хитроумной мусорной корзине, связанной с&lt;br /&gt;
этаким интеллектуальным сканером объектов: каждый раз, покончив с&lt;br /&gt;
использованием/чтением/изучением чего-либо, я бы просто скидывал&lt;br /&gt;
эту штуку в мусоросборник, а она волшебным образом перемещалась&lt;br /&gt;
куда-нибудь и дожидалась там своего часа. Увы, похоже, подобные&lt;br /&gt;
технологии не скоро до меня доберутся. Сейчас самая моя больная&lt;br /&gt;
тема – музыкальная коллекция. Я, конечно, целиком за свободу творчества, но то, что все мои сборники CD имеют разные шрифты, цвета и&lt;br /&gt;
формат хранения данных, действует на нервы. Впрочем, виртуальный&lt;br /&gt;
мир вашей Linux-системы способен удовлетворить любые ваши прихоти, включая страсть к педантизму и скрупулезной правильности!&lt;br /&gt;
&lt;br /&gt;
Python – превосходный язык для выполнения стандартных операций с файлами. Он позволяет обрабатывать имена файлов и использовать функциональные возможности ОС с помощью ряда встроенных&lt;br /&gt;
функций, всегда готов при необходимости вызвать внешние утилиты,&lt;br /&gt;
имеет огромную коллекцию готовых модулей, способных выполнить&lt;br /&gt;
практически любые действия, и к тому же очень прост для понимания.&lt;br /&gt;
Он хорош не только для прототипирования, но и для создания самостоятельных приложений – или как минимум удобных небольших сценариев для выполнения частных задач.&lt;br /&gt;
&lt;br /&gt;
Итак, наша цель – разобраться с коллекцией музыкальных файлов&lt;br /&gt;
на моем Linux-компьютере (отдельным счастливчикам это тоже при-&lt;br /&gt;
годится). У меня есть один большой каталог под названием ‘Music’,&lt;br /&gt;
который, как полагается, делится на подкаталоги по исполнителям,&lt;br /&gt;
альбомам и отдельным трекам. Однако, несмотря на столь стройную&lt;br /&gt;
систему, у меня имеются проблемы непосредственно с музыкальными&lt;br /&gt;
файлами. Вот примерный список вещей, мешающих мне насладиться&lt;br /&gt;
моей коллекцией:&lt;br /&gt;
&lt;br /&gt;
* Некоторые файлы имеют слишком длинные имена, затрудняющие работу с ними. Такое бывает с покупной музыкой: в название&lt;br /&gt;
включается сразу и альбом, и имя исполнителя, и номер дорожки, и&lt;br /&gt;
т.д. Я же хочу единый для всех названий вид, желательно без дурацких символов.&lt;br /&gt;
* Некоторые файлы содержат тэги формата ID3v1, а не ID3v2. Беда&lt;br /&gt;
небольшая, но по возможности я бы предпочел наслаждаться и преимуществами ID3v2.&lt;br /&gt;
* Некоторые файлы снабжены тэгами формата ID3v2, но не ID3v1.&lt;br /&gt;
Из-за этого они не читаются на стареньком MP3-плейере в моем&lt;br /&gt;
автомобиле.&lt;br /&gt;
* Некоторые из файлов неработоспособны. Неплохо было бы&lt;br /&gt;
иметь список дефектных файлов, чтобы удалить их из коллекции&lt;br /&gt;
или заменить.&lt;br /&gt;
* Некоторые из файлов сохранены в нетипичных форматах, которые распознаются не всеми доступными устройствами. Список этих&lt;br /&gt;
файлов тоже пригодился бы.&lt;br /&gt;
&lt;br /&gt;
Но как же достичь хотя бы части этих целей? Хоть я и не вполне уверен, что все перечисленные мной желания легко выполнимы, но попытаться стоит; по крайней мере, я знаю, с чего начать. В Python’е имеется&lt;br /&gt;
модуль под названием os. Он реализует все стандартные функции ОС,&lt;br /&gt;
в частности, связанные с файловой системой. Python – кросс-платформенная разработка, поэтому, несмотря на различия реализации в разных операционных системах, задача у данного модуля одна: предоставление функциональности уровня ОС с единым интерфейсом. Одной из&lt;br /&gt;
самых полезных из известных мне функций, представленных в данном&lt;br /&gt;
модуле, является walk(). Если задать ей имя родительского каталога,&lt;br /&gt;
эта функция вернет список кортежей (см. врезку слева), включающих&lt;br /&gt;
имя родительского каталога, список подкаталогов (если они есть) и&lt;br /&gt;
список имен файлов. Таким образом, чтобы получить список всех файлов, включая полный путь к ним, нужно выполнить функцию walk() с&lt;br /&gt;
заданным нами каталогом и по шагам обработать результат.&lt;br /&gt;
&lt;br /&gt;
==== Что такое «кортеж»? (врезка) ====&lt;br /&gt;
Кортеж – это объект, состоящий из нескольких значений. Он часто&lt;br /&gt;
используется в Python. Хороший пример использования кортежа –&lt;br /&gt;
цвет. Вместо того, чтобы хранить три значения в трех разных переменных для красного, зеленого и синего цветов, вы назначаете одну переменную, содержащую три значения! Кортеж в Python записывается&lt;br /&gt;
примерно так: (123,255,17). Вы можете получить доступ к любому элементу кортежа с помощью индексов – значений в квадратных скобках,&lt;br /&gt;
указываемых после имени переменной. Например, команда print&lt;br /&gt;
Colour[1] вернет значение «255» в случае с предыдущим примером –&lt;br /&gt;
только не забывайте, что значения индексов начинаются с 0!&lt;br /&gt;
&lt;br /&gt;
=== Python и музон ===&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 import os&lt;br /&gt;
 topdir=”/usr/share/music/”&lt;br /&gt;
 walklist = os.walk(topdir)&lt;br /&gt;
 for dirs in walklist:&lt;br /&gt;
   if(dirs[2]):&lt;br /&gt;
     for file in dirs[2]:&lt;br /&gt;
     // Выполнить какое-нибудь действие&lt;br /&gt;
     print os.path.join(dirs[0],file)&lt;br /&gt;
   else:&lt;br /&gt;
     for entry in dirs[1]:&lt;br /&gt;
       print dirs[1]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В данном примере мы сначала импортируем модуль os, затем&lt;br /&gt;
назначаем каталог, который хотим использовать. В результате выполнения функции walk() генерируется объект в переменной walklist. С&lt;br /&gt;
помощью конструктора for мы можем затем использовать имеющийся в Python способ пошагового перемещения по списку для работы с&lt;br /&gt;
каждым элементом. Чтобы вам стало понятнее, данные переменной&lt;br /&gt;
walklist должны выглядеть примерно так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 (‘/usr/share/music/Blonde_Redhead’, [‘1980 Forward’, ‘23’], [])&lt;br /&gt;
 (‘/usr/share/music/Blonde_RedHead/1980 Forward’, [], [‘18-Magic&lt;br /&gt;
 Mountain.mp3’])&lt;br /&gt;
 (‘/usr/share/music/Blonde_Redhead/23’, [], [‘10-My Impure Hair.&lt;br /&gt;
 mp3’,’1-23.mp3’, ‘7-Publisher.mp3’, ‘3-The Dress.mp3’, ‘6-Silently.&lt;br /&gt;
 mp3’])&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь пошагово проверим каждую строку. Если элемент строки&lt;br /&gt;
является файлом (одним или несколькими, в виде списка), мы хотим&lt;br /&gt;
выполнить с ним определенные действия. Оператор if проверяет, имеется ли что-нибудь в каталоге, а если имеется, мы продолжим перемещаться по списку файлов тем же способом. Что делать с файлами,&lt;br /&gt;
пока не совсем ясно, поэтому просто распечатаем список в стандартный вывод. Здесь мы воспользуемся другой полезной функцией модуля os – os.path.join(). Она соединяет вместе все компоненты пути к&lt;br /&gt;
файлу и записывает их в виде, соответствующем текущему модулю os,&lt;br /&gt;
что, несомненно, гораздо лучше, чем простое соединение вхождений с&lt;br /&gt;
помощью слэша /, как это обычно делается в Linux!&lt;br /&gt;
&lt;br /&gt;
Я также добавил здесь еще одну ветку else – на случай, если мы&lt;br /&gt;
захотим что-то проделать и с каталогами (может, переименовать?). Но&lt;br /&gt;
для начала просто выполните данный скрипт, чтобы проверить, работает ли он в вашей системе. Главное – не забудьте указать именно&lt;br /&gt;
тот каталог, где действительно имеются MP3-файлы.&lt;br /&gt;
&lt;br /&gt;
==== Проверка типов файлов ====&lt;br /&gt;
Ну вот, теперь самое время добавить новые функции в данный скрипт.&lt;br /&gt;
Но прежде чем приняться за файл, я предлагаю убедиться, что он действительно музыкальный! Думаю, мы можем смело предположить,&lt;br /&gt;
что все MP3-файлы имеют расширение mp3. Таким образом, в нашем&lt;br /&gt;
цикле мы могли бы проверить это и пометить файлы, не соответствующие данному критерию. Вероятно, мы могли бы просто включить&lt;br /&gt;
такую проверку внутри цикла, уже осуществляемого оператором if, но&lt;br /&gt;
так как проверка может потребоваться не одна, гораздо разумнее присвоить расширение переменной и затем проверять ее. Для извлечения&lt;br /&gt;
расширения воспользуемся простым и мощным способом обработки&lt;br /&gt;
строк и переменных других типов в Python (подробнее – см. врезку&lt;br /&gt;
справа вверху). Добыв расширение файла, можно проверить, не совпадает ли оно с другими форматами музыкальных файлов, вроде ‘.wma’&lt;br /&gt;
и ‘.ogg’ – на случай, если мы захотим поработать и с такими файлами.&lt;br /&gt;
В Python нет оператора case:; придется нагромоздить последовательность операторов if, elif (else if) и else. Символ # в Python указывает, что&lt;br /&gt;
оставшаяся часть строки – комментарий. В итоге наш основной цикл&lt;br /&gt;
примет такой вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 for file in dirs[2]:&lt;br /&gt;
   fullpath = os.path.join(dirs[0],file)&lt;br /&gt;
   extension = file[-4:]&lt;br /&gt;
   if (extension!=’.mp3’):&lt;br /&gt;
     # Это не MP3-файл; проверить на другие расширения?&lt;br /&gt;
     if (extension ==’.wma’):&lt;br /&gt;
       wmalist.append(fullpath)&lt;br /&gt;
     elif (extension ==’.ogg’):&lt;br /&gt;
       ogglist.append(fullpath)&lt;br /&gt;
     else:&lt;br /&gt;
       unknownlist.append(fullpath)&lt;br /&gt;
   else:&lt;br /&gt;
     # Это MP3-файл.&lt;br /&gt;
     # Что-нибудь с ним сделаем.&lt;br /&gt;
     print fullpath&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Мы также должны объявить три переменных типа «список» в&lt;br /&gt;
основном коде. Возможно, вы захотите добавить код, обрабатывающий файлы, или указать другие варианты расширений. Для полноты&lt;br /&gt;
картины, создадим также список неизвестных типов файлов, найденных в нашем каталоге – чисто информативный; заодно он поможет&lt;br /&gt;
обнаружить то, что мы упустили.&lt;br /&gt;
Теперь займемся MP3-файлами. Спецификация ID3v1 весьма&lt;br /&gt;
незамысловата: в конец файла просто добавляется 128 байт информации о файле, и легко создать синтаксический анализатор для сбора&lt;br /&gt;
этих данных и дальнейшей обработки. Однако ID3v2 придерживается&lt;br /&gt;
других стандартов: информация заносится в начало файла, в виде&lt;br /&gt;
сложной структуры с переменной длиной данных, и, если честно, нам&lt;br /&gt;
пришлось бы изрядно разрастить наш маленький скрипт, чтобы с ней&lt;br /&gt;
справиться. Поэтому мы поступим, как все нормальные программисты:&lt;br /&gt;
схитрим! Существует множество готовых модулей Python, способных&lt;br /&gt;
читать данные MP3-тэгов, вот и возьмем один из них. Рекомендую&lt;br /&gt;
EyeD3 – это признанный фаворит, и в нем есть все, что нам нужно. Вы&lt;br /&gt;
найдете его на DVD, прилагаемом к данному журналу, а на сайте http://&lt;br /&gt;
eyed3.nicfit.net может оказаться более свежая версия.&lt;br /&gt;
Данный модуль творит всяческие чудеса; некоторые из них нам&lt;br /&gt;
даже и трогать незачем. Вы можете почитать о нем подробнее на указанном сайте, но для наших целей достаточно импортировать модуль&lt;br /&gt;
и ознакомиться с функциями, которые нам пригодятся.&lt;br /&gt;
К счастью, модуль eyeD3 не относится к числу сложных. Опасения&lt;br /&gt;
внушает только один объект – eyeD3.Tag, содержащий структуру тэгов&lt;br /&gt;
ID3v1 и ID3v2. Чтобы заполнить его данными из вашего файла, вы&lt;br /&gt;
должны использовать метод объекта link с соответствующим именем&lt;br /&gt;
файла, и выглядит это примерно так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 mytag=eyeD3.Tag()&lt;br /&gt;
 mytag.link(‘/usr/share/music/Blonde_Redhead/23/1-23.mp3’)&lt;br /&gt;
 print mytag.getArtist()&lt;br /&gt;
 print mytag.getAlbum()&lt;br /&gt;
 print mytag.getTrackNum()&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изменив любой из тэгов, просто вызовите метод tag.update(), и&lt;br /&gt;
он запишет новый тэг в файл. Теперь разберемся, как мы поступим с&lt;br /&gt;
нашими файлами. Вместо того, чтобы сразу создавать необходимый&lt;br /&gt;
код, я обычно просто вписываю набор операций, которые нужно сделать, в виде комментариев. Потом можно легко сортировать их, разбивать на более мелкие действия, или, в конце концов, собраться с духом&lt;br /&gt;
и дописать требуемый код! Ниже представлен примерный список операций над нашими файлами, которые могли бы понадобиться:&lt;br /&gt;
&lt;br /&gt;
* Получить расширение файла&lt;br /&gt;
* Он заканчивается на .mp3?&lt;br /&gt;
* Проверить, действительно ли это MP3-файл&lt;br /&gt;
* Прочитать тэги версии 2&lt;br /&gt;
* Прочитать тэги версии 1&lt;br /&gt;
* Если имеется только один тип, копировать в другой тип&lt;br /&gt;
* Если тэгов вообще нет, установить пометку&lt;br /&gt;
* Создать нормальное имя файла из тэгов&lt;br /&gt;
* Предложить/записать новое имя файла&lt;br /&gt;
* Проверить, соответствует ли название альбома имени каталога&lt;br /&gt;
* Если это не MP3-файл, то что? Добавить в соответствующий список&lt;br /&gt;
&lt;br /&gt;
Как сказано выше, впишем это в скрипт в виде комментариев.&lt;br /&gt;
Обычно приступать к делу лучше с первого пункта, чтобы от вас не&lt;br /&gt;
ускользнули логика действий и структура скрипта. Особо хитрые участки – или участки, используемые многократно – можно вынести в&lt;br /&gt;
отдельную функцию. Существуют мнения и за и против этого, и программисты нередко обсуждают, что допустимо выделять в отдельную&lt;br /&gt;
функцию. Теория выглядит примерно так: чем больше вы выносите из&lt;br /&gt;
основного цикла программы, тем более очевидной становится общая&lt;br /&gt;
задача. Но есть и контрдовод: чем больше вы включаете подобных&lt;br /&gt;
обобщений, делая программу максимально простой и понятной, тем&lt;br /&gt;
сложнее потом добраться до работы отдельных функций. Резюме:&lt;br /&gt;
поскольку вы пишете программу исключительно для личного пользования, делайте так, как вам удобнее!&lt;br /&gt;
&lt;br /&gt;
==== Проверка типов файлов – 2 ====&lt;br /&gt;
Теперь пора и делом заняться. Прежде всего, получим расширения&lt;br /&gt;
файлов через слайсинг Python’а, а затем проверим, MP3 это или нет.&lt;br /&gt;
После чего употребим модуль eyeD3, чтобы распознать, действительно&lt;br /&gt;
ли файл соответствует заявленному формату.&lt;br /&gt;
&lt;br /&gt;
После операторов проверки сделаем отступы, чтобы было видно,&lt;br /&gt;
какой блок кода используется при обнаружении соответствия, и воз-&lt;br /&gt;
вратимся к оператору else. В данном случае я слегка поменил порядок&lt;br /&gt;
действий, для начала разобравшись с файлами, не соответствующими&lt;br /&gt;
формату MP3, а затем через оператор else перешел к дальнейшим&lt;br /&gt;
действиям. Почему? Да просто очень легко позабыть про файлы, не&lt;br /&gt;
интересующие вас в данный момент; если вы можете парой строк отде-&lt;br /&gt;
латься от второстепенных данных, лучше сразу с ними и покончить. В&lt;br /&gt;
конечном итоге, быть может, у нас появится специальная функция для&lt;br /&gt;
их обработки.&lt;br /&gt;
&lt;br /&gt;
В представленном ниже коде можно встретить так называемые&lt;br /&gt;
функции «санации» (sanitize). Присутствие их тела в основном коде&lt;br /&gt;
сделало бы его неудобочитаемым, кроме того, иногда их бывает нужно&lt;br /&gt;
вызывать из разных мест. Наконец, так с их реализацией можно разо-&lt;br /&gt;
браться и позже, не затрагивая основной код.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 if (extension !=’.mp3’):&lt;br /&gt;
   # Не файл MP3? Проверить на другие расширения?&lt;br /&gt;
   if (extension == ‘.wma’):&lt;br /&gt;
     wmalist.append(fullpath)&lt;br /&gt;
     # logger.warn(“silly wma file %s”,fullpath)&lt;br /&gt;
   elif (extension == ‘.ogg’):&lt;br /&gt;
     ogglist.append(fullpath)&lt;br /&gt;
   else:&lt;br /&gt;
     unknownlist.append(fullpath)&lt;br /&gt;
 else:&lt;br /&gt;
   # Это вправду MP3-файл?&lt;br /&gt;
   if eyeD3.isMp3File(fullpath):&lt;br /&gt;
     # Прочитать тэг ID3V2&lt;br /&gt;
     tag2 = eyeD3.Tag()&lt;br /&gt;
     tag1 = eyeD3.Tag()&lt;br /&gt;
     a = tag2.link(fullpath,eyeD3.ID3_V2)&lt;br /&gt;
     b = tag1.link(fullpath,eyeD3.ID3_V1)&lt;br /&gt;
     if b and not a:&lt;br /&gt;
       # Имеется только тэг ID3v1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
print “version1 only”&lt;br /&gt;
# Создать информацию для tag2 по tag1&lt;br /&gt;
print fullpath&lt;br /&gt;
artist = tag1.getArtist()&lt;br /&gt;
album = tag1.getAlbum()&lt;br /&gt;
title = tag1.getTitle()&lt;br /&gt;
print artist,album,title&lt;br /&gt;
tag1.update(eyeD3.ID3_V2)&lt;br /&gt;
# check tags are cool&lt;br /&gt;
elif a and not b:&lt;br /&gt;
# Имеется только тэг ID3v2&lt;br /&gt;
print fullpath&lt;br /&gt;
artist = tag2.getArtist()&lt;br /&gt;
album = tag2.getAlbum()&lt;br /&gt;
title = tag2.getTitle()&lt;br /&gt;
print artist,album,title&lt;br /&gt;
try:&lt;br /&gt;
tag2.update(eyeD3.ID3_V1_1)&lt;br /&gt;
except UnicodeEncodeError:&lt;br /&gt;
logger.error(“tag invalid for v1.1 in file %s”,&lt;br /&gt;
fullpath)&lt;br /&gt;
elif a and b:&lt;br /&gt;
# Имеются оба тэга&lt;br /&gt;
logger.info( “both versions fine %s”, fullpath)&lt;br /&gt;
else:&lt;br /&gt;
# Тэгов нет вообще&lt;br /&gt;
logger.warn(‘this file has no tags! %s’, fullpath)&lt;br /&gt;
error_flag = True&lt;br /&gt;
# М.б. удастся вытянуть что-нибудь из имени&lt;br /&gt;
каталога, где сидит файл!&lt;br /&gt;
if not error_flag:&lt;br /&gt;
# Пускай имя файла будет&lt;br /&gt;
# number-name.mp3&lt;br /&gt;
title=tag2.getTitle()&lt;br /&gt;
title = title.replace(‘ ‘,’_’)&lt;br /&gt;
n=tag2.getTrackNum()&lt;br /&gt;
# Номер (number) у нас есть&lt;br /&gt;
ns = str(n[0])&lt;br /&gt;
if len(ns)==1:&lt;br /&gt;
ns= ‘0’+ns&lt;br /&gt;
ns=ns+’-’+title+’.mp3’&lt;br /&gt;
# Уберем нехорошие символы&lt;br /&gt;
ns=sanitize(ns)&lt;br /&gt;
if (file!=ns):&lt;br /&gt;
logger.info(“change filename suggested for %s, to&lt;br /&gt;
%s!”,filename,ns)&lt;br /&gt;
os.rename(fullpath, os.path.join(dirs[0],ns)&lt;br /&gt;
else:&lt;br /&gt;
# Выдадим предупреждение&lt;br /&gt;
logger.warn(“ file %s does not seem to be a valid mp3&lt;br /&gt;
file”,fullpath)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Полная распечатка этого небольшого скрипта представлена на&lt;br /&gt;
DVD данного номера Linux Format. Но будьте осторожны – скрипт не&lt;br /&gt;
завершен! Нельзя гарантировать, что он не испортит вашу музыкаль-&lt;br /&gt;
ную коллекцию! Особенно следует обратить внимание на проверку&lt;br /&gt;
символов в кодировке Unicode, нередко встречающихся в тэгах ID3v2&lt;br /&gt;
(недопустимых в тэгах первой версии). Также вы, возможно, захотите&lt;br /&gt;
обработать и файлы формата .ogg.&lt;br /&gt;
&lt;br /&gt;
Здесь не доделано также множество проверок на ошибки. В случае&lt;br /&gt;
с тэгами в кодировке Unicode поможет структура try: ... except:; она же&lt;br /&gt;
пригодится и для других случаев (например, выяснении, как поступать&lt;br /&gt;
с музыкальными файлами без прав доступа на запись). Но я надеюсь,&lt;br /&gt;
что рассмотренный в статье пример показал вам, как просто создавать&lt;br /&gt;
полезные скрипты!&lt;br /&gt;
&lt;br /&gt;
==== Будем резать! (врезка) ====&lt;br /&gt;
В Python используются индексы для «нарезания на кусочки» (иногда говорят «слайсинг»,&lt;br /&gt;
от англ. slicing) строк, списков и других типов&lt;br /&gt;
переменных. Пусть у нас имеется запись plop.&lt;br /&gt;
mp3; мы можем запросто извлечь из нее&lt;br /&gt;
любой нужный нам бит. Откройте терминал,&lt;br /&gt;
запустите Python для входа в интерактивный&lt;br /&gt;
режим и попробуйте следующие команды:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; string = ‘plop.mp3’&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; print string[1]&lt;br /&gt;
 l&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; print string[:2]&lt;br /&gt;
 pl&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; print string [-0]&lt;br /&gt;
 p&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; print string [-1]&lt;br /&gt;
 3&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; print string [-4:]&lt;br /&gt;
 .mp3&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В последнем операторе print из строки выхватываются четыре последних символа.&lt;br /&gt;
Отрицательные индексы отсчитываются с конца строки, но будьте внимательны: -0 означает&lt;br /&gt;
&lt;br /&gt;
==== Журналирование (врезка) ====&lt;br /&gt;
Небольшие скрипты часто нашпиговывают множеством выводов промежуточных данных на&lt;br /&gt;
печать, чтобы знать, что и как происходит. Это действительно удобно; но иногда хочется превратить строку с оператором печати в комментарий, потом снова её подключить, и т.д. Проще всего&lt;br /&gt;
в таком случае использовать встроенный в Python модуль ведения журнала! Он умеет выводить&lt;br /&gt;
сообщения и в консоль, но способен различать сообщения по значимости, и вы сможете гибко&lt;br /&gt;
регулировать количество выводов на консоль путём правки всего одной строки кода скрипта.&lt;br /&gt;
Добавьте этот модуль к списку импортируемых и впишите следующий код в начало вашего&lt;br /&gt;
скрипта:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 logger = logging.getLogger(“pymusic”)&lt;br /&gt;
 # Создать обработчик консоли&lt;br /&gt;
 handler = logging.StreamHandler()&lt;br /&gt;
 # Создать форматирование и настроить обработчик на его использование&lt;br /&gt;
 formatter = logging.Formatter(“%(asctime)s - %(name)s - %(levelname)s - %(message)s”)&lt;br /&gt;
 handler.setFormatter(formatter)&lt;br /&gt;
 # Добавить обработчик к модулю ведения журнала&lt;br /&gt;
 logger.addHandler(handler)&lt;br /&gt;
 logger.setLevel(logging.WARN)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Часть этих штук смахивает на волшебство, и кое-кто считает модуль ведения журнала непостижимым, но на самом деле все очень просто. Если вы хотите узнать больше, документация&lt;br /&gt;
находится здесь: http://docs.python.org/lib/module-logging.html. Фактически, всё, что необходимо&lt;br /&gt;
знать – это набор стандартных команд для управления выводом сообщений в консоль.&lt;br /&gt;
Например, следующий код:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 logger.warn(“ file %s does not seem to be a valid mp3 file”,fullpath)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
выведет в консоль только сообщения, относящиеся к предупреждениям типа WARN или ниже&lt;br /&gt;
(порядок такой: Critical, Error, Warning, Info, Debug). Можно установить и собственные уровни, но&lt;br /&gt;
мы займёмся этим в другой раз...&lt;br /&gt;
то же самое, что и просто 0, а именно – начало&lt;br /&gt;
строки! (Индексы в Python нумеруются с 0.)&lt;br /&gt;
&lt;br /&gt;
==== Форматирование (врезка) ====&lt;br /&gt;
Необходимость чёткого форматирования кода в Python многих ставит&lt;br /&gt;
в тупик, но это вполне простое и разумное требование. В частности,&lt;br /&gt;
отступы строк (посредством пробелов или табуляции) в блоке кода&lt;br /&gt;
должны быть одинаковыми, потому что в Python отступы являются&lt;br /&gt;
значимыми. Взглянув на код, вы не увидите фигурных скобок вокруг&lt;br /&gt;
любых операторов или блоков кода: Python распознаёт окончание блока по окончанию отступа. Это даёт сразу два преимущества: код становится гораздо удобнее для чтения, и не надо заботиться о вложенных&lt;br /&gt;
фигурных скобках!&lt;/div&gt;</summary>
		<author><name>OWeRQ</name></author>	</entry>

	</feed>