Lấy dữ liệu file

Chào các anh e đang học ngành CNTT năm nhất ạ e có bài tập đề ntn:

Em đã thử split dữ liệu trong file nhưng không hiểu sao nó chỉ ra 1 giá trị số. Như hàng bưởi, khi e split ra thì nó chỉ ra 1 số 7 thôi các ảnh có cách nào lấy số liệu trong file để tính toán không ạ e cảm ơn.

Bài làm của bạn đâu?

3 Likes
f=open('data.txt','r',encoding='utf-8')
content=f.readlines()
f.close()
print(content)
tt=[]
tt.append(content[1])
print(tt)

Dạ e làm tới đó thì bị rối do mảng ghi rút ra không như ý muốn.

Trong bài đăng, bạn có nói đến từ split, mình nghĩ là bạn biết đến hàm (phương thức) split() chuỗi của python rồi chứ!
https://www.w3schools.com/python/ref_string_split.asp

1 Like

dạ vâng ạ em biết nó qua java nó là phương thức giúp tách chuỗi ra đúng không ạ

anh em thử tách của file ra vd “0001”, “Bưởi 1kg”, 70000, 100 dầu tiên e tách \n trước rồi e tách tiếp dến e tách dấu , mà sau đó e print thì báo lỗi anh

f=open('data.txt','r',encoding='utf-8')
content=f.readlines()
f.close()
print(content)
tt=[]
tt.append(content[1])
print(tt)
for x in tt:
    print(x.split(','))

anh đây bài e mới sữa lại giống như anh chỉ :

['0001,Bưởi 1kg,70000,100\n', '0002,Mì gói,8000,1000\n', '0003,Bút long màu,20000,50']
['0002,Mì gói,8000,1000\n']
['0002', 'Mì gói', '8000', '1000\n']

tới đó rồi làm sao để lấy dc số 1000 anh

Có lẽ bạn khá rảnh, hoặc không hiểu readlines() trả về gì.
Biến content là dạng danh sách (list) rồi. Bạn dùng biến tt để làm gì nữa vậy?
for x in content xem nào! Vứt cái tt kia đi!

2 Likes

dạ vâng để e thử lại

f=open('data.txt','r',encoding='utf-8')
content=f.readlines()
f.close()
print(content)
for i in content:
    (i.split(','))
    print(i)

e đã sữa rồi anh kêt quả ra ntn:

['0001,Bưởi 1kg,70000,100\n', '0002,Mì gói,8000,1000\n', '0003,Bút long màu,20000,50']
0001,Bưởi 1kg,70000,100

0002,Mì gói,8000,1000

0003,Bút long màu,20000,50

anh h làm sao lấy các số cần thiết ra để tính ạ e thử dùng i[0] hay gì đó mà nó chỉ ra 1 số ạ

# Lấy từng dòng (và remove cái "xuống dòng, \n" ở cuối mỗi dòng) từ trong file text
# Bỏ vào list
lines = [line.rstrip('\n') for line in open('test.txt')]

# Khởi tạo sẵn danh sách hàng hoá
items = []


# Xử lý cái list vừa lấy từ file
for line in lines:

    # Mỗi line bây giờ có định dạng là str
    print('Dữ liệu thô lấy từ file text có type là:')
    print(type(line))
    print(line)

    '''
    Dùng split để tách những thông tin được ngăn bởi dấu phẩy
    Lúc này, type của biến line đã chuyển từ str sang list,
    tức thông tin trong line đã được tách thành từng phần riêng biệt, không còn là 1 dòng text nữa
    Gán cho biến item, chủ yếu để dễ nhìn thôi
    '''
    item = line.split(',')
    print('Sau khi split(), đổi thành: ')
    print(type(item))
    # Bỏ hết item vào trong danh sách hàng hoá đã khởi tạo bên trên
    # Tức list bên trong list
    items.append(item)
    print(item)

    print('.....\n')

# Giá trị tồn kho trước khi tính
grand_total = 0

for item in items:
    # Hiện tại đang là
    # ['"0001"', ' "Bưởi 1kg"', ' 70000', ' 100']
    # [string | string | string | string]
    # Cần chuyển thành int để tính toán
    # [string | string | int | int]

    total = int(item[2]) * int(item[3])
    grand_total = grand_total + total

    print('Mã hàng: ' + item[0] + ' | Tên: ' + item[1] + ' | Còn tồn: ' + item[2] + ' | Đơn giá: ' + item[3] + ' ==> Tiền hàng: ' + str(total))


print('Tổng giá trị tồn kho: ' + str(grand_total))

Output:

Dữ liệu thô lấy từ file text có type là:
<class ‘str’>
“0001”, “Bưởi 1kg”, 70000, 100
Sau khi split(), đổi thành:
<class ‘list’>
[’“0001”’, ’ “Bưởi 1kg”’, ’ 70000’, ’ 100’]

Dữ liệu thô lấy từ file text có type là:
<class ‘str’>
“0002”, “Mì gói”, 8000, 1000
Sau khi split(), đổi thành:
<class ‘list’>
[’“0002”’, ’ “Mì gói”’, ’ 8000’, ’ 1000’]

Dữ liệu thô lấy từ file text có type là:
<class ‘str’>
“0003”, “Bút long màu”, 20000, 50
Sau khi split(), đổi thành:
<class ‘list’>
[’“0003”’, ’ “Bút long màu”’, ’ 20000’, ’ 50’]

Mã hàng: “0001” | Tên: “Bưởi 1kg” | Còn tồn: 70000 | Đơn giá: 100 ==> Tiền hàng: 7000000
Mã hàng: “0002” | Tên: “Mì gói” | Còn tồn: 8000 | Đơn giá: 1000 ==> Tiền hàng: 8000000
Mã hàng: “0003” | Tên: “Bút long màu” | Còn tồn: 20000 | Đơn giá: 50 ==> Tiền hàng: 1000000
Tổng giá trị tồn kho: 16000000
[Finished in 0.3s]

4 Likes

dạ cảm ơn anh e hiểu cách anh rồi

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