30/09/2018, 18:03

Cách in kết quả của chương trình đếm số từ trong một file vào một file khác?

Mọi người cho em hỏi, em có 1 bài tập như thế này:

Để user nhập một file bất kì vao( vd:a.txt), sau đó chương trình sẽ đếm số chữ ( vd: hello I I am–>hello:1, i:2,am:1) và tự tạo và ghi ra file mới ( vd:b.txt) những thứ đếm được.

Em đã viết được cái function để đếm số chữ nhưng khi khi nhập 1 file vào open(‘a.txt’,‘r’), nhưng chương trình chỉ tạo ra file b.txt mà không có gì trong đó.

Đây là code hiện tại

def count_word(file):
    
    #open an input and output file
    infile = open(file,"r")
    outfile = open("frequency.txt","w")

    
    #dem tu trong string
    split_string = file.split()
    string_dict = {}
    #first populate the dictionary with the keys being each word in the string, all having zero for their values.
    for word in split_string:
        string_dict[word] = 0

    #Then cycle through the split string again and if the word is one of the keys in the dictionary add 1 each time.
    for word in split_string:
        if word in string_dict.keys():
            string_dict[word]=string_dict[word]+1

    return string_dict

    #close the input and output file
    outfile.close()
    infile.close()

#Main Program
name_infile = raw_input("Enter the name of a text file: ")
count_word(name_infile)
print "frequency.txt was created successfully"

Ai có cach giải quyết giúp dùm e với.

Mai Anh Dũng viết 20:16 ngày 30/09/2018

Bạn post code lên đi cho mọi người giúp.

K Tiger viết 20:19 ngày 30/09/2018
def count_word(file):
    
    #open an input and output file
    infile = open(file,"r")
    outfile = open("frequency.txt","w")

    
    #dem tu trong string
    split_string = file.split()
    string_dict = {}
    #first populate the dictionary with the keys being each word in the string, all having zero for their values.
    for word in split_string:
        string_dict[word] = 0

    #Then cycle through the split string again and if the word is one of the keys in the dictionary add 1 each time.
    for word in split_string:
        if word in string_dict.keys():
            string_dict[word]=string_dict[word]+1

    return string_dict

    #close the input and output file
    outfile.close()
    infile.close()

#Main Program
name_infile = raw_input("Enter the name of a text file: ")
count_word(name_infile)
print "frequency.txt was created successfully"
Mai Anh Dũng viết 20:14 ngày 30/09/2018

Code này bạn đâu có sử dụng outfile đâu, bạn chỉ open rồi close thì sao mà ghi được? Với cả code này return trước khi close file nữa.

Nhớ đọc bài này để biết cách post code: Cách post Code dùng Markdown trong Category Programming

K Tiger viết 20:05 ngày 30/09/2018

vậy bây giờ phải sửa như thế nào vậy, phải them hay bớt gì mà vẫn giữ lại cái def count_word?

Mai Anh Dũng viết 20:15 ngày 30/09/2018

Bạn copy code này ở đâu thế? Đạt thấy hình như bạn không biết Python, nhưng code thì viết rất tốt, có vẻ là code copied ở đâu đấy.

Đây là chương trình đã sửa.

def count_word(file):

    #open an input and output file
    infile = open(file,"r")
    outfile = open("frequency.txt","w")

    
    #dem tu trong string
    split_string = infile.read().split()
    string_dict = {}
    #first populate the dictionary with the keys being each word in the string, all having zero for their values.
    for word in split_string:
        string_dict[word] = 0

    #Then cycle through the split string again and if the word is one of the keys in the dictionary add 1 each time.
    for word in split_string:
        if word in string_dict.keys():
            string_dict[word]=string_dict[word]+1

    outfile.write(str(string_dict))
    #close the input and output file
    outfile.close()
    infile.close()

#Main Program
name_infile = raw_input("Enter the name of a text file: ")
count_word(name_infile)
print "frequency.txt was created successfully"

Đạt có file input, nội dung như sau

datle tmp $ cat input
day day nhau hoc

Chạy chương trình

datle tmp $ python dnh.py
Enter the name of a text file: input
frequency.txt was created successfully

Kiểm tra kết quả

datle tmp $ cat frequency.txt
{‘nhau’: 1, ‘day’: 2, ‘hoc’: 1}

K Tiger viết 20:05 ngày 30/09/2018

à tại cái phần file cua python e chỉ mới học nên chẳng biết làm còn cái def thì làm trước đó rồi, nên khi gom 2 cái vào nó khong chạy được cũng chẳng hiểu. thanks

htl@PyMI.vn viết 20:07 ngày 30/09/2018

Code hàm count_word của bạn trả về giá trị string_dict là 1 dictionary. Khi bạn gọi nó ở dòng count_word(name_infile) thì kết quả dòng đó trả về là string_dict thôi chứ nó không ghi vào file (return mà). @ltd sửa lại dòng đó để nó ghi vào file là được.
Phần chương trình chính, mình thấy hay để trong 1 câu lệnh if như sau:

if __name__ == '__main__':
    name_infile = raw_input("Enter the name of a text file: ")
    count_word(name_infile)
    print "frequency.txt was created successfully"

Mục đích là để khi bạn import file này từ file khác thì nó không chạy đoạn này. Nó chỉ chạy khi bạn gọi trực tiếp file này.
VD bạn lưu code này là code1.py thì:

  • Khi gõ lệnh python code1.py ở cmd hoặc terminal, chương trình sẽ chạy.
  • Còn khi bạn muốn dùng hàm count_word ở file .py khác thì dùng:
import code1
#sau đó sẽ dùng được hàm count_word bằng cách gọi:
code1.count_word(file)
Bài liên quan
0