为了账号安全,请及时绑定邮箱和手机立即绑定

如何限制每个循环在python中将多个带引号的字符串作为单个字符串读取?

如何限制每个循环在python中将多个带引号的字符串作为单个字符串读取?

胡说叔叔 2021-09-14 13:44:02
CSV 文件包含以下数据,"1111"","2222"2222","3333, 33, 33","444",""读取此数据的csv阅读器,['"1111""'、'"2222"2222"'、'"3333'、'33'、'33"'、'"444"'、'""']当我尝试将此读取器对象转换为列表并尝试使用每个循环对其进行迭代时,循环将“3333、33、33”视为三个不同的值。我的要求是将其作为单个字符串读取。代码:reader = csv.reader(csv_file, delimiter=',',  quotechar="'", escapechar = "'")       for row in reader:           colValues = list(row)           print(colValues)           for each in colValues:               print(each)电流输出:"1111"""2222"2222""3333 33 33""444"""期望输出:"1111"""2222"2222""3333, 33, 33""444"""
查看完整描述

2 回答

?
眼眸繁星

TA贡献1873条经验 获得超9个赞

我认为该csv模块无法处理这种不规则格式。


您可以根据","哪个将获得正确的列进行拆分。您还需要去除第一个和最后一个引号。


>>> row = '"1111"","2222"2222","3333, 33, 33","444",""'

>>> row = row[1:-1]

>>> print(row)

1111"","2222"2222","3333, 33, 33","444","


>>> row.split('","')

['1111"', '2222"2222', '3333, 33, 33', '444', '']

共:


with open(csv_file) as lines:

    for line in lines:

        line = line.rstrip()  # need to get rid of newline

        for element in line[1:-1].split('","'):

            print(element)

输出:


1111"

2222"2222

3333, 33, 33

444


查看完整回答
反对 回复 2021-09-14
?
慕码人2483693

TA贡献1860条经验 获得超9个赞

csv给定输入字符串,没有库的解决方法:


input = '"1111"","2222"2222","3333, 33, 33","444",""'

这是返回所需的输出:


res = input.split(",\"")

for i, e in enumerate(res):

  if len(e) > 1 and e[0] != '"' or len(e) == 1:

    res[i] = '"' + e



for e in res:

  print (e)


# "1111""

# "2222"2222"

# "3333, 33, 33"

# "444"

# ""

但我不知道它是否适用于文件的所有行。



查看完整回答
反对 回复 2021-09-14
  • 2 回答
  • 0 关注
  • 235 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信