Bazı Temel Python Sorular

4 Cevap php

Ben bu yüzden lütfen bana ayı toplam piton çaylak değilim. Python html bir sayfa tarayabilir ve UTF-8 uyumlu şey ile Microsoft Word kişilerin örneklerini değiştirmek istiyorum.

Benim sorum Python (ben bu google'da ettik ama şimdiye kadar net bir cevap bulamadım) nasıl yaparım, nedir? Ben bu yüzden bu gibi basit bir şey anlamaya Python sularda benim parmak daldırma istiyorum başlamak için iyi bir yerdir. Ben gerekir gibi görünüyor:

  1. Bir değişken içine MS Word yapıştırılan yük metin
  2. tür içeriği işlevini yerine bazı çalıştırabilirsiniz
  3. çıktısı

PHP Ben bu gibi yapardı:

$test = $_POST['pasted_from_Word']; //for example “Going Mobile”

function defangWord($string) 
{
    $search = array(
        (chr(0xe2) . chr(0x80) . chr(0x98)),
        (chr(0xe2) . chr(0x80) . chr(0x99)),
        (chr(0xe2) . chr(0x80) . chr(0x9c)), 
        (chr(0xe2) . chr(0x80) . chr(0x9d)), 
        (chr(0xe2) . chr(0x80) . chr(0x93)),
        (chr(0xe2) . chr(0x80) . chr(0x94)), 
        (chr(0x2d))
    ); 

    $replace = array(
        "‘",
        "’",
        "“",
        "”",
        "–",
        "—",
        "–"
    );

    return str_replace($search, $replace, $string); 
} 

echo defangWord($test);

Python bunu nasıl yapardınız?

EDIT: Hmmm, tamam şu an için UTF-8 ve kuruluşlar hakkında benim karışıklık görmezden. Giriş MS Word yapıştırılan metin içeriyor. Kıvırcık tırnak gibi şeyler gibi garip simgeler gösteriyor. Çeşitli PHP fonksiyonları deneyin ve bana istediğim sonuç veren değil düzeltmek için kullanılır. Bir hex editörü o garip semboller görüntüleyerek Ben onlar (0xe2, 0x80 vb) yukarıda kullanılan sembollere karşılık geldiğini gördüm. Yani ben sadece HTML kuruluşlar ile tuhaf karakterleri takas. Ben yukarıda olması bit zaten UTF-8 IS Yani, ne garip sembolleri neden olduğunu, MS Word içinde yapıştırılan ediliyor?

EDIT2: Yani Python hakkında biraz bilgi edinmek için yola ve ben gerçekten kodlama anlamıyorum bulundu. Ben çözmeye çalışıyordum sorun uçtan uca sonsistent kodlama alarak basitçe ele alınabilir. Giriş formu UTF-8 ise, giriş depolayan veritabanı Word yapıştırma çalışıyor ... UTF-8 ve UTF-8 çıkışları sayfasıdır. Özel fonksiyonlar gerekli. Şimdi, küçük bir Python öğrenme hakkında ...

4 Cevap

Her şeyden önce, bu değil Microsoft Word kişiler-onlar are UTF-8. HTML kuruluşlara dönüştürülmesi demektir.

Gibi bir şey yazmak için Pythonic yolu:

chr(0xe2) . chr(0x80) . chr(0x98)

olacaktır:

'\xe2\x80\x98'

Ama Python zaten yerleşik bir işleve sahiptir yapmak istediğiniz dönüşüm türü için:

def defang(string):
    return string.decode('utf-8').encode('ascii', 'xmlcharrefreplace')

Bu “ gibi sayısal varlık ile gibi karakterler bir dizge içinde UTF-8 kodlarını yerini alacak.

Adlandırılmış olanlar mümkün olan sayısal varlıkları değiştirmek istiyorsanız:

import re
from htmlentitydefs import codepoint2name

def convert_match_to_named(match):
    num = int(match.group(1))
    if num in codepoint2name:
        return "&%s;" % codepoint2name[num]
    else:
        return match.group(0)

def defang_named(string):
    return re.sub('&#(\d+);', convert_match_to_named, defang(string))

Ve böylece gibi kullanabilirsiniz:

>>> defang_named('\xe2\x80\x9cHello, world!\xe2\x80\x9d')
'“Hello, world!”'


Cevabı tamamlamak için, bir dosyayı işlemek için örnek eşdeğer kod şöyle olacaktır:

# in Python, it's common to operate a line at a time on a file instead of
# reading the entire thing into memory

my_file = open("test100.html")
for line in my_file:
    print defang_named(line)
my_file.close()

Bu cevap Python 2.5 hedeflenmiş olduğunu unutmayın; Unicode durum Python 3 + için önemli ölçüde farklıdır.

Ben de aşağıda bobince yorumuna katılıyorum: Eğer sadece UTF-8 biçiminde metin tutmak ve bunu, doğru içerik türü ve charset ile göndermek eğer; Eğer ASCII olması gerekiyorsa, o zaman orada-kuruluşlar adlandırılmış olanları kullanmak için gerek gerçekten sayısal sopa ile.

Python kodu aynı anahat vardır.

Sadece Python-izm ile PHP-izm tüm değiştirin.

Bir File nesnesi oluşturarak başlayın. Bir file.read sonucu () bir string amacıdır. Dizeleri "yerine" işlemi var.

Word, HTML temizliği için en iyi bahis sadece bunun için bir mod var HTML Tidy hangi kullanıyor. Orada programlı yapmak gerekiyorsa a few Python wrappers kullanabilirsiniz.

S.Lott dediği gibi, Python kod çok, çok benzer-tek fark aslında işlev çağrıları / deyimleri olacağını olacaktır.

Python file_get_contents() doğrudan bir eşdeğeri vardır sanmıyorum, ama dosyadaki satırların bir dizi elde edebilirsiniz, çünkü daha sonra bu gibi yenisatırlar onlara katılabilirsiniz:

sample = '\n'.join(open(test, 'r').readlines())

EDIT: Boşver, çok daha kolay bir yolu var: sample = file(test).read()

Telli değiştirme ve neredeyse tam olarak aynıdır str_replace(),

sample = sample.replace(search, replace)

Ve çıktısı bir print ifadesi olarak basittir:

print defang_word(sample)

Gördüğünüz gibi Yani, iki versiyonu hemen hemen aynı görünüyor.