30/09/2018, 18:04

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()
Buss In Boots viết 20:06 ngày 30/09/2018

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

htl@PyMI.vn viết 20:20 ngày 30/09/2018
  • 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.
Buss In Boots viết 20:06 ngày 30/09/2018
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?

Minh Hoàng viết 20:18 ngày 30/09/2018

infile.readlines mới đúng

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

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)
Buss In Boots viết 20:20 ngày 30/09/2018

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?

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

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

Buss In Boots viết 20:06 ngày 30/09/2018
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?

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

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
Bài liên quan
0