当我尝试用csv reader阅读字符串时,我得到的输出将JSON字符串转换为需要保留的'{filter":"freeinternet"', 'region:"178307"}"'
"{\"filter\":\"freeinternet\",\"region\":\"178307\"}"
这就是我尝试过的。我甚至尝试过添加Quotechar、escapechar,并尝试不同的版本,但结果都是不正确的结果
import csv
from io import StringIO
s = u"""url,forgeresponsetype,identifiers,metadata,partitionkey,sortkey,expirationdate,lastmodifieddate,redirectkey,siteid,locale,type,update_date
https://www.expedia.com/Seattle-Hotels.d178307.Travel-Guide-Hotels,MOVED_PERMANENTLY,"{\"filter\":\"freeinternet\",\"region\":\"178307\"}",,HOTEL_DESTINATION_THEME.494647,1.en_US.filter:freeinternet.region:178307,1696746399,2023-06-18T06:26:40.521Z,,1,en_US,HOTEL_DESTINATION_THEME,21/06/23
https://www.expedia.com/Seattle-Hotels.d178307.Travel-Guide-Hotels,MOVED_PERMANENTLY,"{\"filter\":\"freeinternet\",\"region\":\"178307\"}",,HOTEL_DESTINATION_THEME.494647,1.en_US.filter:freeinternet.region:178307,1696746399,2023-06-18T06:26:40.521Z,,1,en_US,HOTEL_DESTINATION_THEME,21/06/23
https://www.expedia.com/Seattle-Hotels.d178307.Travel-Guide-Hotels,MOVED_PERMANENTLY,"{\"filter\":\"freeinternet\",\"region\":\"178307\"}",,HOTEL_DESTINATION_THEME.494647,1.en_US.filter:freeinternet.region:178307,1696746399,2023-06-18T06:26:40.521Z,,1,en_US,HOTEL_DESTINATION_THEME,21/06/23"""
f = StringIO(s)
reader = csv.reader(f, delimiter=',', escapechar = '\\')
xd = [row for row in reader]
任何帮助都很感激
3条答案
按热度按时间qfe3c7zg1#
您可以做的是,操作输入字符串,使文件和字典数据具有不同的引号字符。
例如,使用
'
作为输入的引号字符,并将"
作为JSON/字典值的引号字符。行
s.replace(',"{', ',\'{').replace('}",', '}\',')
用'
替换"
引号字符,然后我们在csv.reader
的参数中使用它。注意:只要没有嵌套字典,它就可以工作。
6jygbczu2#
是的,这是因为Python中的
csv.reader
将反斜杠字符\
视为转义字符,并且CSV数据中的JSON字符串具有需要保留的反斜杠看看这个
esyap4oy3#
试试这个: