【发布时间】:2020-04-18 16:11:40
【问题描述】:
我在尝试解析文件时遇到问题,在该文件中,对于每一行,我都有如下结构,所有字符串都用引号引起来:
"is_post" "author_name" "timestamp" "tags" "text"
文件中的所有数据也都被引用了;这意味着我可能有一些东西:
"True", "auth1", "1970:01:01T23:59:59", "soccer football match", "Just a great match!"
当"text" 字段内部有\n 时,就会出现问题,例如:
"True", "auth1", "1970:01:01T23:59:59", "soccer football match", "Just a great match!
Barcelona 2
Real Madrid 3
Real Madrid wins the match!"
在这种情况下,我可以通过哪种方式继续阅读下一行中的文件,直到到达下一个报价?
到目前为止我尝试过的如下:
import shlex
from typing import NamedTuple, List
class Comment(NamedTuple):
is_post: str
author: str
timestamp: str
tags: str
text: str
comments: List[Comment]
def open_comment_file(self):
with open(self.operations + "comments.csv", "r") as f:
for line in f:
arr = shlex.split(line)
comments.append(Comment(arr[0], arr[1], arr[2], arr[3], arr[4]))
但显然,我没有考虑line 不以引号结尾的情况,因为我正在逐行读取文件。
我该如何处理这种情况?
编辑:对于上面的例子,我想要得到的结果是一行,如下:
"True", "auth1", "1970:01:01T23:59:59", "soccer football match", "Just a great match! Barcelona 2 Real Madrid 3 Real Madrid wins the match!"
【问题讨论】:
-
它是一个 csv 文件。您可以使用 csv 阅读器来为您处理。 docs.python.org/3/library/csv.html
-
好的,谢谢@fralau 所以,我将使用该答案中定义的
column_wrapper。