我有一个包含多个条目的文件。每个条目的格式如下:
"field1","field2","field3","field4","field5"
所有字段都保证不包含任何引号,但它们可以包含,
。问题是field4
可以分为多行。因此,示例文件可能如下所示:
"john","male US","done","Some sample text
across multiple lines. There
can be many lines of this","foo bar baz"
"jane","female UK","done","fields can have , in them","abc xyz"
我想使用Python提取字段。如果该字段不会被分割为多行,则这很简单:Extract string from between quotations。但我似乎无法在多线字段的存在下找到一种简单的方法。
编辑:实际上有五个领域。抱歉,如果有的混乱。该问题已经过编辑以反映这一点。答案 0 :(得分:6)
我认为csv
模块可以解决这个问题。它使用换行符正确分割:
import csv
f = open('infile', newline='')
reader = csv.reader(f)
for row in reader:
for field in row:
print('-- {}'.format(field))
它产生:
-- john
-- male US
-- done
-- Some sample text
across multiple lines. There
can be many lines of this
-- foo bar baz
-- jane
-- female UK
-- done
-- fields can have , in them
-- abc xyz
答案 1 :(得分:1)
您链接的问题的答案对我有用:
import re
f = open("test.txt")
text = f.read()
string_list = re.findall('"([^"]*"', text)
此时,string_list包含您的字符串。现在,这些字符串中可以包含换行符,但您可以使用
new_string = string_list.replace("\n", " ")
清理它。
答案 2 :(得分:0)
尝试:
awk '{FS=','} /pattern if needed/{print $0}' fname
答案 3 :(得分:0)
如果您控制此文件的输入,则需要先将\n
替换为某些内容([\ n]?)进行清理,然后再将值放入以逗号分隔的列表中。
或者,而不是保存字符串 - 将它们保存为r字符串。
然后,使用csv
模块使用预定义的分隔符,编码和quotechar快速解析它