Tạo function để in trong python

Mọi người cho mình hỏi,mình có 1 doan code như thế này. Trong file của user nhập vào có dang ( 'a' :1,'b':2 ...), giờ mình muốn nó in mấy cái đó ra file example.txt thành ( a 1, b 2(xuống dong)). Nhưng cái function ko chạy được, làm sao để fix vậy mn.
def nice_printing(file):
    infile=open(file,'r')
    outfile=open('example.txt','w')
    items=file.items()
    for keys,values in file:
        print keys,values

    infile.close()
    outfile.close()

có ai biết cách để fix không?

  • Dòng thứ 3 bạn có lỗi cú pháp. Dấu ( phải ở trước dấu '.
  • file là từ khóa của python, bạn đặt tên biến khác đi nhé.
  • Khi đọc file thì dùng hàm read() hoặc readlines() để đọc. Dữ liệu trả về là string (với read()) hoặc list (với readlines()). Chứ không phải kiểu dict để bạn sử dụng luôn hàm items() như trên.
def nice_printing(a_string):
    infile=open(a_string,'r')
    outfile=open('acb.txt','w')
    items=a_string.readlines()
    for keys,values in items:
        print keys,values

    infile.close()
    outfile.close()

Mình sửa lại khi chay nó báo lỗi str object has no attribute readlines là sao?

infile.readlines mới đúng :smiley:

1 Like

Sửa cả vòng lặp for nữa nhé. Vì mỗi dòng là 1 str ko phải dict nên ko có key, value. Bạn có thể dùng line.split(': ')

for line in items:
  key = line.split(': ')[0]
  value = line.split(': ')[1]
  print(key, value)

xin lỗi mình ghi đề sai, file cua user có dạng là {‘a’:1,‘b’:2} chứ không phải là ngoặc (), vậy thì phải sửa ntn vậy?

Bạn cứ dùng print để biết giá trị các biến tại các thời điểm nhé. Đó là 1 cách debug. Rồi làm từng bước một.
Và lần sau bạn post đầy đủ code, thông báo lỗi… cho mọi người dễ sửa. Sau khi mọi người sửa, bạn so sánh toàn bộ code được sửa và code của bạn thì sẽ rút kinh nghiệm được. Đừng hỏi ngắt quãng như này.
Tham khảo link: convert str to dict

def nice_printing(a_string):
    infile=open(a_string,'r')
    outfile=open('acb.txt','w')
    item=infile.readlines()
    for line in item:
        key=line.split(': ')[0]

        value=line.split(': ')[1]

        print (key,value)
    infile.close()
    outfile.close()

đây là code sau khi sửa lại, khi nhập file của user có {‘a’:1,‘b’:2} thÌ nó báo lỗi list index out of range là sao vậy?

Thông báo lỗi đầy đủ là như này:

D:\HTL\Desktop>python test.py
Traceback (most recent call last):
  File "test.py", line 14, in <module>
    nice_printing('text.txt')
  File "test.py", line 8, in nice_printing
    value = line.split(': ')[1]
IndexError: list index out of range

Bạn đã đọc link mình gửi và thử áp dụng nó chưa?

Thôi để mình sửa luôn hộ nhé.
Vì file của bạn chỉ có 1 dòng nên có thể dùng read()
outfile chưa dùng nên mình bỏ đi

import ast


def nice_printing(a_string):
    infile = open(a_string, 'r')
    data = ast.literal_eval(infile.read())
    for key, value in data.items():
        print(key, value)
    infile.close()

nice_printing('text.txt')

Nội dung file text.txt:

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

Kết quả:

D:\HTL\Desktop>python test.py
a 1
b 2
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?