2017-05-20 4 views
0

Je tente d'encoder un fichier texte préexistant et de l'écrire dans utf-8. J'ai fait un menu dans lequel on demande à l'utilisateur quel fichier texte ils aimeraient encoder, mais après cela je suis absolument perdu. Je regardais un post précédent et j'ai incorporé ce code dans mon code, mais je ne suis pas sûr de comment cela fonctionne ou ce que je fais.Comment encoder un fichier texte préexistant en utf-8 dans un fichier séparé?

Toute aide serait grandement appréciée!

import codecs 

def getMenuSelection(): 
    print "\n" 
    print "\t\tWhich of the following files would you like to encode?" 
    print "\n" 
    print "\t\t================================================" 
    print "\t\t1. hamletQuote.txt" 
    print "\t\t2. RandomQuote.txt" 
    print "\t\t3. WeWillRockYou.txt"  
    print "\t\t================================================" 
    print "\t\tq or Q to quit" 
    print "\t\t================================================" 

    print "" 

    selection = raw_input("\t\t") 
    return selection 

again = True 

while (again == True): 

    choice = getMenuSelection() 

    if choice.lower() == 1 : 

     with codecs.open(hamletQuote.txt,'r',encoding='utf8') as f: 
      text = f.read() 

     with codecs.open(hamletQuote.txt,'w',encoding='utf8') as f: 
      f.write(text) 

    if choice.lower() == 2 : 

     with codecs.open(RandomQuote.txt,'r',encoding='utf8') as f: 
      text = f.read() 

     with codecs.open(RandomQuote.txt,'w',encoding='utf8') as f: 
      f.write(text) 

    if choice.lower() == 3 : 

     with codecs.open(WeWillRockYou.txt,'r',encoding='utf8') as f: 
      text = f.read() 

     with codecs.open(WeWillRockYou.txt,'w',encoding='utf8') as f: 
      f.write(text) 

    elif choice.lower() == "q": 
     again = False 

Répondre

0

Pourquoi ne pas utiliser l'instruction open régulière et ouvrez le fichier sous forme binaire et d'écrire le texte codé à utf-8, vous devrez ouvrir le fichier en mode lecture régulière car il est pas codé:

with open("hamletQuote.txt", 'r') as read_file: 
    text = read_file.read() 

with open("hamletQuote.txt", 'wb') as write_file: 
    write_file.write(text.encode("utf-8")) 

Mais si vous insistez sur l'utilisation codecs, vous pouvez le faire:

with codecs.open("hamletQuote.txt", 'r') as read_file: 
    text = read_file.read() 

with codecs.open("hamletQuote.txt", 'wb', encoding="utf-8") as write_file: 
    write_file.write(text.encode("utf-8")) 
1

code Votre fonctionne correctement, si vous devez faire e Les noms de fichier sont des chaînes. Votre nom de fichier d'entrée est également le même que le nom de fichier de sortie, de sorte que le fichier d'entrée sera écrasé. Vous pouvez résoudre ce problème en nommant le fichier de sortie quelque chose de différent:

with codecs.open("hamletQuote.txt",'r',encoding='utf8') as f: 
    text = f.read() 

with codecs.open("hamletQuote2.txt",'w',encoding='utf8') as f: 
    f.write(text) 

Si votre curieux de savoir comment cela fonctionne, codecs.open ouvre un fichier codé en mode donné; dans ce cas r qui signifie le mode de lecture. w fait référence au mode d'écriture. f fait référence à l'objet fichier qui a plusieurs méthodes, y compris read() et write() (que vous avez utilisé). Lorsque vous utilisez l'instruction with, cela simplifie l'ouverture du fichier. Cela garantit que le nettoyage est toujours utilisé. Sans le bloc with, vous devrez spécifier f.close() après avoir fini de travailler avec le fichier.

+0

Merci! Cependant je me demandais où je pourrais trouver le nouveau fichier encodé? C'est probablement une question stupide, mais je suis tellement perdu. – Student

+0

Le nouveau fichier sera placé dans le même répertoire que celui où le script a été exécuté. Je viens juste de réaliser que vos noms de fichier d'entrée et de sortie sont les mêmes. Ainsi, lorsque vous exécutez le script hamletQuote.txt est remplacé par le nouveau fichier encodé utf8 également appelé hamletQuote.txt. J'ai mis à jour ma réponse. Vous devez nommer le fichier de sortie quelque chose de différent si vous souhaitez conserver le fichier d'entrée. –

+0

utilise 'io' au lieu de' codecs'. C'est compatible avec Python 3 et le support de ligne Universal fonctionne –