Lỗi TypeError khi đọc ghi file

Mọi người cho mình hỏi,mình có 1 cái function như ở dưới nhưng nó không chạy được.Cho hỏi cần sửa thế nào.

def pretty_printing(dict):
    infile = open(file,"r")
    outfile = open("example.txt","w")

    order_keys = dict.keys()
    order_keys.sort()


    for key in order_keys:
        print key, dict[key]
    outfile.close()
    infile.close()
#test
a_file=raw_input("enter your file:")
pretty_printing(a_file)

có ai có cách fix ko

Thông báo lỗi gì nhỉ? Câu hỏi này mơ hồ quá.

nó nói:infile = open(file,“r”)
TypeError: coercing to Unicode: need string or buffer, type found

Hàm của bạn đặt tham số là dict nhuwngbeen trong bạn dùng tham số file. Nó báo lỗi là đúng rồi. Sửa file thành dict nhé
Ah, tuy nhiên cả dictfile đều là từ khóa của python, giống như def vậy. Nên bạn chọn tên tham số khác nhé. filename chẳng hạn, code cũng dễ hiểu hơn

mình sửa lại như vầy,nó có tạo ra file example.txt mà không có gì ở trong hết,nó báo:‘str’ object has no attribute ‘keys’

def pretty_printing(file_name):
    infile = open(file_name,"r")
    outfile = open("example.txt","w")

    order_keys = file_name.keys()
    order_keys.sort()


    for key in order_keys:
        print key, dict[key]
    outfile.close()
    infile.close()

Bạn xem bài này nhé

đoạn code của bài đó là là chỉ đọc file của user xong print thẳng ra đúng không bạn, còn mình cần nó in vào trong 1 cái file khác, vs lại mình cũng chưa học cái import ast nên không dung dc.

Đoạn print đó chỉ để biết dữ liệu mình lấy được là loại gì.
Việc ghi ra file ko có gì khó.
Khi đọc file thì sau khi open bạn phải read() để lấy dữ liệu ở dạng str. Sau đó dùng thao tác với string, vd string[1:-2] để loại bỏ dấu { } ở đầu và cuối. Sau đó split(', ') để tách từng item trong string, sau đó split tiếp. Đó là cách thủ công. Còn cách nhanh thì dùng module ast như mình dùng. Quan trọng là bạn hiểu cách làm, dùng công cụ gì chả được, miễn là nhanh, cần gì phải đi đường vòng :smiley:

cái chỗ string[1:-2] là mình ghi for key,value in new_file[1:-2] hả bạn?

def nice_printing(a_string):
    infile = open(a_string, 'r')
    data = infile.read()
    print(data)
    items = data[1:-2].split(', ')
    print(items)
    for item in items:
        key = item.split(':')[0][1:-1]
        value = item.split(':')[1]
        print(key, value)
    infile.close()

nice_printing('text.txt')

Kết quả:

{'a':1, 'b':2}

["'a':1", "'b':2"]
a 1
b 2

{‘a’:1,‘b’:2}
["‘a’:1,‘b’:"]
(‘a’, “1,‘b’”)
sao nó lại in ra như vầy thay vì ?
a 1
b 2

Bạn post đầy đủ code và dữ liệu cần xử lý nhé. Dữ liệu khác nhau 1 khoảng trắng thì cách split cungz khác. Bạn đọc hiểu code rồi thì sửa theo dữ liệu của mình, đừng máy móc copy paste.

đề là user nhập 1 file chứa text bất kì,chương trình phải đếm số chữ trong file đó vd: I am am–>I 1, am 2.Xong chương trình phải in ra file có tên là example.txt theo dạng l 1(line 1), am 2(line 2). Mình đã làm xong cái function để đếm r còn cái để in ra mà làm hoài ko dc.cái này là phần đã xong

def word_count(a_string):
    infile = open(a_string,"r")
    outfile = open("example.txt","w")
    new_file = infile.read().split()
    string_dict = {}
    for word in new_file:
        string_dict[word] = 0
    for word in new_file:
        if word in string_dict.keys():
            string_dict[word]=string_dict[word]+1

    outfile.write(str(string_dict))

    outfile.close()
    infile.close()

Đoạn
outfile.write(str(string_dict))
Sửa thành

for key, value in string_dict.items():
  outfile.write(key, value, '\n')

sao sửa cái đó lại nó báo function takes exactly 1 argument (3 given), mình nghĩ cái đoạn function của count ổn rồi mà vì run được

Mình nhầm sang lệnh print :smile:
Bạn sửa thành outfile.write(str(key)+str(value)+'\n') nhé

nó chạy rồi cảm ơn bạn, nhưng sao nó báo lỗi cái dòng infile = open(a_string, ‘r’) là coercing to Unicode: need string or buffer . Với lại cho mình hỏi nếu mình muốn file xuất ra theo thứ tự abc mình them vào đây nhưng sao không có gì xảy ra hết vậy.

def nice_printing(a_string):
    infile = open(a_string, 'r')
    data = infile.read()
    
    items = data[1:-2].split(', ')
    items.sort()

Lỗi đó có thể do a_string của bạn ko phải là tên file kiểu string mà là 1 file object
Còn sort thì nó chỉ trả về giá trị thôi, phải gán lại vào items.
items = items.sort()

vậy làm sao fix cái a_string được?

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?