Tôi muốn truyền dữ liệu như [1,2,'a','He said "what do you mean?"']
đến chuỗi được định dạng csv.Làm cách nào để ghi dữ liệu vào định dạng csv dưới dạng chuỗi (không phải tệp)?
Thông thường, người dùng sẽ sử dụng csv.writer()
vì điều này xử lý tất cả các trường hợp cạnh điên (thoát dấu phẩy, thoát dấu ngoặc kép, phương ngữ CSV, v.v.) Bắt giữ là csv.writer()
sẽ xuất ra đối tượng tệp chứ không phải chuỗi.
giải pháp hiện tại của tôi là chức năng hơi hacky này:
def CSV_String_Writeline(data):
class Dummy_Writer:
def write(self,instring):
self.outstring = instring.strip("\r\n")
dw = Dummy_Writer()
csv_w = csv.writer(dw)
csv_w.writerow(data)
return dw.outstring
bất cứ ai có thể đưa ra một giải pháp thanh lịch mà vẫn xử lý các trường hợp cạnh tốt không?
Edit: Đây là cách tôi đã kết thúc làm việc đó:
def csv2string(data):
si = StringIO.StringIO()
cw = csv.writer(si)
cw.writerow(data)
return si.getvalue().strip('\r\n')
Ví dụ tốt. :) Là một sidenote, hành vi thông thường khi gặp phải dòng mới trong một tệp CSV là gì? '\ N' có ở giữa dữ liệu không, nhưng' \ r \ n' cho biết kết thúc bản ghi bất kể nó xuất hiện ở đâu? (Giả sử bạn đang ở trên một nền tảng sử dụng '\ r \ n' như là người kết thúc dòng.) –
Tôi không chắc chắn. Tôi đã có thể mong đợi '\ r \ n' bản thân mình vì tham số mặc định cho' io.StringIO() 'là' newline = None' cho phép chế độ dòng mới phổ quát, sẽ tự động sử dụng kiểu dòng mới chính xác theo nền tảng của bạn. Tôi hơi bối rối bởi hành vi này. –
@ Li-aungYip: Tôi đã mở [câu hỏi về điều này] (http://stackoverflow.com/questions/9157623/unexpected-behavior-of-universal-newline-mode-with-stringio-and-csv-modules). –