[Решено]Как сравнивать в питоне?

Модератор: Модераторы разделов

C10H15N
Сообщения: 277
Статус: \(0_0)/ !!111

[Решено]Как сравнивать в питоне?

Сообщение C10H15N »

Как вот такое делать в питоновом скрипте?

Код: Выделить всё

#!/bin/bash
if [ $(file -b --mime-encoding $TMP) == "iso-8859-1" ]; then
   iconv -f cp1251 -t utf-8 $TMP -o $TMP
fi
Спасибо сказали:
Аватара пользователя
zombie
Сообщения: 539
ОС: Ubuntu 10.04 with OpenBox

Re: [Решено]Как сравнивать в питоне?

Сообщение zombie »

А зачем?
Ну если бы надо было вставить в прогу я бы сделал просто:

Код: Выделить всё

import os
os.system("if [ $(file -b --mime-encoding " + tmp + " ) == 'iso-8859-1' ]; then iconv -f cp1251 -t utf-8 " + tmp + " -o " + tmp + "; fi")
ЛИНУКСФОРУМ ДЛЯ ЛЮДЕЙ | Гугляшечка | Блог
I'm banned by /dev/random with his team.
Спасибо сказали:
Аватара пользователя
zombie
Сообщения: 539
ОС: Ubuntu 10.04 with OpenBox

Re: [Решено]Как сравнивать в питоне?

Сообщение zombie »

А по вашему вопросу - это в форум "программирование".
ЛИНУКСФОРУМ ДЛЯ ЛЮДЕЙ | Гугляшечка | Блог
I'm banned by /dev/random with his team.
Спасибо сказали:
C10H15N
Сообщения: 277
Статус: \(0_0)/ !!111

Re: [Решено]Как сравнивать в питоне?

Сообщение C10H15N »

>А зачем?

Переделываю один скрипт на питон, развесистых гуёв захотелось.) Через zenity гуи не очень интиресные выходят.

>я бы сделал просто: ...

Не работает, через os.system я уже пробвал

Код: Выделить всё

[: 1: us-ascii: unexpected operator
Да + это некомильфо, не питон а вызов шелла из питона, получается.


Спасибо сказали:
Аватара пользователя
zombie
Сообщения: 539
ОС: Ubuntu 10.04 with OpenBox

Re: [Решено]Как сравнивать в питоне?

Сообщение zombie »

C10H15N писал(а):
22.07.2010 00:33
Да + это некомильфо, не питон а вызов шелла из питона, получается.
Вызов шела из питона есть это все. Просто в команду мы добавляем содержимое переменных питона, а не баша. И вообще это нормальное явление - если вы что-то делаете через bash.

C10H15N писал(а):
22.07.2010 00:33
[: 1: us-ascii: unexpected operator
не, не, не... ну по отлаживайте, все будет работать. но не все же мне за вас делать.
ЛИНУКСФОРУМ ДЛЯ ЛЮДЕЙ | Гугляшечка | Блог
I'm banned by /dev/random with his team.
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: [Решено]Как сравнивать в питоне?

Сообщение diesel »

C10H15N писал(а):
22.07.2010 00:33
>я бы сделал просто: ...

Не работает, через os.system я уже пробвал

Код: Выделить всё

[: 1: us-ascii: unexpected operator
Да + это некомильфо, не питон а вызов шелла из питона, получается.

а зачем это все звать из os.system?
зовите из os.system file -b --mime-encoding для нужного файла. if в питоне есть :)
iconv или шото похожее тоже можно найти:
http://gomputor.wordpress.com/2008/09/22/c...ng-with-python/
http://xahlee.org/perl-python/charset_encoding.html
etc

думаю что и file -b --mime-encoding можно переписать, просто надо поискать/подумать как, можно посмотреть как это сам file делает
Спасибо сказали:
C10H15N
Сообщения: 277
Статус: \(0_0)/ !!111

Re: [Решено]Как сравнивать в питоне?

Сообщение C10H15N »

>if в питоне есть

Да я знаю.Я так и хотел - но не сравнивает!
Как я понял, загвоздка в том что результат file остаётся где-то там, в шелле, а в питона не попадает.
Надо os.popen использовать, судя по всему.Чёто пока ничего не получается (>_<)
Спасибо сказали:
Аватара пользователя
zombie
Сообщения: 539
ОС: Ubuntu 10.04 with OpenBox

Re: [Решено]Как сравнивать в питоне?

Сообщение zombie »

diesel писал(а):
22.07.2010 00:57
зовите из os.system file -b --mime-encoding для нужного файла. if в питоне есть
Я не вдумывался.
ЛИНУКСФОРУМ ДЛЯ ЛЮДЕЙ | Гугляшечка | Блог
I'm banned by /dev/random with his team.
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: [Решено]Как сравнивать в питоне?

Сообщение diesel »

C10H15N писал(а):
22.07.2010 01:36
>if в питоне есть

Да я знаю.Я так и хотел - но не сравнивает!
Как я понял, загвоздка в том что результат file остаётся где-то там, в шелле, а в питона не попадает.
Надо os.popen использовать, судя по всему.Чёто пока ничего не получается (>_<)



Код: Выделить всё

vasiliy@linux-0un3:~> python
Python 2.6.5 (r265:79063, Jul  5 2010, 11:46:13)
[GCC 4.5.0 20100604 [gcc-4_5-branch revision 160292]] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import subprocess
>>> k = subprocess.Popen(["file", "-b", "--mime-encoding", "/home/vasiliy/test1"], stdout=subprocess.PIPE).communicate()[0]
>>> k
'iso-8859-1\n'
>>> if k == 'iso-8859-1\n':
...     print "ok.converting"
...
ok.converting


PS. с питоном я не дружу, насколько это все идеологически верно - понятия не имею.
Спасибо сказали:
C10H15N
Сообщения: 277
Статус: \(0_0)/ !!111

Re: [Решено]Как сравнивать в питоне?

Сообщение C10H15N »

А, вот куда тему унесли.

>subprocess.Popen

Да, такой метод якобы более верный - пишут что os.popen -deprecated.
А почему?subprocess - лишний модуль, и писать больше - даже в примерах на питоносайте видно.Ну их в пень, я сделал через os.popen

Код: Выделить всё

kode = os.popen('file -b --mime-encoding "%s"' % tmpA).read()

if kode == 'iso-8859-1\n':
    deko = open(tmpA, 'rb')
    content = unicode(deko.read(), 'cp1251')
    deko.close()
    deko = open(tmpA, 'wb')
    deko.write(content.encode('utf-8'))
    deko.close()
А идеологически всё верно.В питоне, оказывается, нет внятных средств для определения кодировки.
Есть chardet, но он неверно у меня кодировку определял.
Или какие-то феерические конструкции, высчитывание каких-то(?) байтов и прочий бред, вместо одной строчки (^_^)

Так что solved.
Спасибо сказали: