如何限制每个循环读取多个带引号的字符串作为 python 中的单个字符串?
How to limit for each loop to read multiple string with quotation as a single string in python?
CSV 文件包含以下数据,
"1111"","2222"2222","3333, 33, 33","444",""
csv reader 读取此数据,
['"1111""', '"2222"2222"', '"3333', ' 33', ' 33"', '"444"', '""']
当我尝试将此 reader 对象转换为列表并尝试使用每个循环对其进行迭代时,循环将“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"
""
没有 csv
库的解决方法,给定输入字符串:
input = '"1111"","2222"2222","3333, 33, 33","444",""'
这是return所需的输出:
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"
# ""
但我不知道它是否适用于文件的所有行。
我认为 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
CSV 文件包含以下数据,
"1111"","2222"2222","3333, 33, 33","444",""
csv reader 读取此数据,
['"1111""', '"2222"2222"', '"3333', ' 33', ' 33"', '"444"', '""']
当我尝试将此 reader 对象转换为列表并尝试使用每个循环对其进行迭代时,循环将“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"
""
没有 csv
库的解决方法,给定输入字符串:
input = '"1111"","2222"2222","3333, 33, 33","444",""'
这是return所需的输出:
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"
# ""
但我不知道它是否适用于文件的所有行。
我认为 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