2015-08-07 2 views
-4

Я написал этот код вчера. Он сортирует длинные данные по алфавиту и помещает их в 26 файлов, названных от a до z. Каждая первая буква подходит к соответствующему файлу: для примера, все 'a' идут в файл A, все 'b' идут в файл B ... и т. Д.optimisng существующий код Python

Теперь, я хочу, чтобы этот код был больше python, потому что я имел в виду логику java, когда я это делал.

Любые предложения?

from os import linesep 

__author__ = '1498009' 
variable = [] 
filepath = "U:\\Mes documents\\DU\\Devoir2\\data.txt" 

with open(filepath, 'r') as f: 
    lineList = f.readlines() 
    lineList.sort() 

    for line in lineList: 
     for word in line.split(): 
      variable.append(word) 

    for c in range(ord('a'), ord('z')+1): 
     Letter = chr(c) 

    for line2 in variable: 
     Letter2 = line2.split()[0][0] 
     if Letter == Letter2: 
      filestream = open(Letter, "a") 
      filestream.write(line2 + linesep) 
      filestream.close() 

    print(line) 
+3

Если вы пытаетесь для повышения удобочитаемости см. здесь: https://www.python.org/dev/peps/pep-0008/ Если вы хотите, чтобы другие просмотрели и прокомментировали ваш рабочий код здесь: http://codereview.stackexchange.com/ – abaldwin99

+0

Что значит «больше питона»? (также, не могли бы вы исправить форматирование кода? его очень сложно прочитать) –

+0

abaldwin99: спасибо за ссылки .. Да, я хотел бы, чтобы вы прокомментировали мой код. –

ответ

0
from string import lowercase 
from os import linesep 
filepath = "U:\\Mes documents\\DU\\Devoir2\\data.txt" 


with open(filepath, 'r') as f: 
    line_list = f.readlines() 
    letters = lowercase 

    # This is a technique known as list comprehension 
    words = [line.split() for line in line_list] 

    # This is a small trick to make a 2d list into a single list 
    words = sum(words, []) 

    # Sort your words into separate lists alphabeltically 
    sorted_words = [filter(lambda word: word.lower()[0] == letter, words) 
        for letter in letters] 

    # Write them to files 
    for letter, word_list in zip(letters, sorted_words): 
     # This line removes any lists that do not have any words in them 
     # You can remove it if you want all files 
     if len(word_list) != 0: 
      # If you wish to make the words unique, you can add this line 
      # word_list = set(word_list) 
      filestream = open(letter, "w") 
      filestream.write(linesep.join(word_list)) 
      filestream.close() 

Хорошо, так что совсем немного нового материала здесь для вас, если вы приехали из Java фоне.

Если вы хотите узнать больше о списке понимании: Heres is a pretty good website

И если вам интересно, что это «фильтр» и «лямбда» слова, они являются частью магии, которая является функциональным программированием. Here is a quick introduction to python's functional programming components.

Наконец, «молния» слово, которое вы видите просто принимает два списка, такие как:

a = [1,2,3,4] 
b = [5,6,7,8] 

и превращает их в пары на основе их элементов, так:

zip(a, b) 
[(1, 5), (2, 6), (3, 7), (4, 8)] 
Смежные вопросы