2009-11-29 32 views
41
e = ('ham', 5, 1, 'bird') 
logfile.write(','.join(e)) 

Tôi phải tham gia để tôi có thể viết nó vào một tệp văn bản.Tại sao tôi không thể tham gia tuple này bằng Python?

+10

BTW, bạn có biết yo không u có thể viết dòng đầu tiên của bạn mà không có dấu ngoặc đơn? Thật tuyệt khi loại bỏ những gì cơ bản là tiếng ồn. – djc

Trả lời

85

join chỉ mất danh sách các chuỗi, do đó chuyển đổi chúng đầu tiên

>>> e = ('ham', 5, 1, 'bird') 
>>> ','.join(map(str,e)) 
'ham,5,1,bird' 

Hoặc có thể pythonic hơn

>>> ','.join(str(i) for i in e) 
'ham,5,1,bird' 
+4

sử dụng str() thay vì repr() có thể gây ra MẤT THÔNG TIN. –

+1

Nó phụ thuộc vào mục đích của bạn, nhưng 'str()' nói chung là những gì bạn muốn hiển thị một cái gì đó cho người dùng (ví dụ trong một logfile mà là những gì OP muốn). –

+1

Thật vậy. str (__str__ hoặc tốt hơn, __unicode__) là dành cho con người. Và câu hỏi đặt ra một logfile, đó là dành cho con người. Vì vậy, trong trường hợp này tôi nghĩ str() là tốt hơn so với __repr__. – extraneon

10

join() chỉ hoạt động với chuỗi chứ không phải bằng số nguyên. Sử dụng ','.join(str(i) for i in e).

+0

Nhận xét về bộ dữ liệu không có dấu ngoặc đơn là điều tuyệt vời. –

3

Sử dụng các module csv. Nó sẽ lưu một câu hỏi tiếp theo về cách xử lý các mục có chứa dấu phẩy, tiếp theo là một câu hỏi khác về xử lý các mục có chứa ký tự mà bạn đã sử dụng để trích dẫn/thoát khỏi dấu phẩy.

import csv 
e = ('ham', 5, 1, 'bird') 
with open('out.csv', 'wb') as f: 
    csv.writer(f).writerow(e) 

Kiểm tra nó:

print open('out.csv').read() 

Output:

ham,5,1,bird 
+3

Dường như không cần thiết phức tạp. –

+1

@LS: Tất cả không phải là những gì nó có vẻ. Đơn giản bằng cách sử dụng dấu phẩy phân cách mà không cần quan tâm để thoát khỏi dấu phẩy vv đến unstuck rất nhanh. –

4

Bạn có thể được tốt hơn chỉ đơn giản là chuyển đổi các tuple vào một danh sách đầu tiên:

e = ('ham', 5, 1, 'bird') liste = list(e) ','.join(liste)

Các vấn đề liên quan