道歉,如果有一个非常简单的答案。经过两天的搜索,我还没有找到它。
我正在从网站上抓取一个表并通过循环来构建字符串列表。我的代码很有效,直到其中一个值中有逗号。
这就是我构建列表的方式(清楚地省略了循环结构):
.NotDetermined
这导致:
record = (name, availability, upc, price)
productList.append(",".join(item or "" for item in record))
然后我用CSV写入CSV:
[u'Product One, In Stock, 999999999999, $99.99', u'Product Two, In Stock, ....]
直到其中一个产品名称中有逗号为止,它才能正常工作。毫不奇怪,此时它将产品名称分成多个列。
感谢您提供的任何帮助。谢谢。
答案 0 :(得分:2)
停止手动添加和删除逗号。这就是csv
/ unicodecsv
模块存在的原因,因为你会得到引用错误的内容。
构建行时,将它们设为字段的简单序列(list
或tuple
s),而不是整行作为单个字符串:
productList.append([item or "" for item in record])
# If the or "" is to handle Nones only, module already handles this, so you can simplify:
productList.append(record)
在编写行时,它们的格式已经正确,因此不需要拆分:
with open('data.csv', 'wb') as f
w = csv.writer(f, delimiter = ",")
w.writerows(productList)
# writerows call is just faster way to do:
# for row in productList: w.writerow(row)
答案 1 :(得分:0)
在你的 void foo(std::map<int,B*> inmap){
std::map<int,B*>::iterator it=inmap.find([Something]);
D *pd=dynamic_cast<D*>(it->second);
if(pd!=nullptr){
// You know it->second is pointing to an object of type D
}
else{
// Just an ordinary type B
}
}
变量中,你已经有了一个元组,对吧?
不要将record
添加到您创建的字符串中加入该元组中的值,而只需添加元组本身:
productList
然后,使用record = (name, availability, upc, price)
productList.append(record)
编写器的writerow
方法直接在文件中写入元组。在packages's web page中显示的示例中,它显示了如何编写元组。该包将负责包含带引号的逗号字符串。
unicodecsv
这会生成一个合适的import unicodecsv as csv
productList = [
(u'Product One', u'In Stock', 999999999999, u'$99.99'),
(u'Product,Two', u'In Stock', 1234, u'$5.00'),
(u'Product Three', u'In Stock', 5678, u'$7.99'),
]
with open("foo.csv", "wb") as f:
w = csv.writer(f, encoding='utf-8')
for product in productList:
w.writerow(product)
:
foo.csv
(请参阅$ cat foo.csv
Product One,In Stock,999999999999,$99.99
"Product,Two",In Stock,1234,$5.00
Product Three,In Stock,5678,$7.99
如何正确包裹"Product,Two"
?)