Python CSV刮削
我有一个CSV文件,其数据组织如下:Python CSV刮削,python,csv,scrape,import-from-csv,Python,Csv,Scrape,Import From Csv,我有一个CSV文件,其数据组织如下: Name: xyz DNS: xyz Type: xyz Date: xyz Name: xyz DNS: xyz Type: xyz Date: xyz Name: xyz DNS: xyz Type: xyz Date: xyz 对于许多用户来说,这种情况仍然存在 我正在试图弄清楚如何在Python中正确地读取这些数据,这似乎不是一个难题,只是我在如何读取信息上感到困惑,因为这不是csv文件的常规设置,如果是名称、DNS等,则会更容易,然后我
Name: xyz
DNS: xyz
Type: xyz
Date: xyz
Name: xyz
DNS: xyz
Type: xyz
Date: xyz
Name: xyz
DNS: xyz
Type: xyz
Date: xyz
对于许多用户来说,这种情况仍然存在
我正在试图弄清楚如何在Python中正确地读取这些数据,这似乎不是一个难题,只是我在如何读取信息上感到困惑,因为这不是csv文件的常规设置,如果是名称、DNS等,则会更容易,然后我会知道如何正确地处理这些信息
我是这样开始的:
import csv
r = csv.reader(open("data.csv"))
现在,执行r.next()将逐行获取每件事情,但这没有帮助,因为我的计划是使用一个计数器来检查日期是否大于某个时间,并且类型字段与某个值匹配,并在循环中添加一些变量,如计数器
就数据的结构而言,这有点接近我正在做的事情,但我认为这对我的探索没有帮助:
那根本不是csv文件。如果这是您的格式,您可以扫描文件,直到到达一个空白的新行,这表示一个部分。然后可以相应地解析每个部分 我认为
csv
在这里没有任何帮助
您只需读取文件并逐行迭代即可
f = open('data.csv')
for line in f:
pass
那根本不是csv文件。如果这是您的格式,您可以扫描文件,直到到达一个空白的新行,这表示一个部分。然后可以相应地解析每个部分 我认为
csv
在这里没有任何帮助
您只需读取文件并逐行迭代即可
f = open('data.csv')
for line in f:
pass
您可以在调用
csv.reader
时尝试读取该数据,方法是将方言.delimiter
设置为\n
并将方言.lineterminator
设置为\n\n
。(或将每个\n
替换为\r\n
或仅替换为\r
,具体取决于文件的行尾格式。)
然后您将获得
Name:xyz
,DNS:xyz
等作为“csv”的“列”的内容文件–您只需在冒号处拆分这些文件以进行进一步处理…您可以在使用方言调用csv.reader
时尝试通过设置参数来读取该数据。分隔符设置为\n
和方言.lineterminator
设置为\n\n
。(或将每个\n
替换为\r\n
或仅替换为\r
,具体取决于文件的行尾格式。)
然后您将获得Name:xyz
,DNS:xyz
等作为“csv”文件“列”的内容–您只需在冒号处拆分这些列以进行进一步处理…如其他人所述,您不需要csv阅读器(当然可以使用,但没有任何好处)。只需读取数据文件并为当前部分保留一些状态。在空行上存储当前节并重置状态
像这样的方法应该会奏效:
def load(input):
data = []
current = {}
for line in input:
# may be useful to strip the line here and forget about
# leading/trailing whitespaces
if not line.strip():
data.append(current)
current = {}
# use line.split(':') if `:' does not appear in values
colon = line.find(':')
if colon == -1: # unknown format, throw an exception or just ignore it
continue
key = line[:colon]
value = line[colon+2:-1] # or line[colon1].strip() to remove trailing whitespace
current[key] = value
return data
import sys
if __name__ == "__main__":
with(open(sys.argv[1])) as input:
print load(input)
正如其他人提到的,您不需要CSV阅读器(当然您可以使用它,但没有任何好处)。只需读取数据文件并为当前部分保留一些状态。在空行上存储当前节并重置状态
像这样的方法应该会奏效:
def load(input):
data = []
current = {}
for line in input:
# may be useful to strip the line here and forget about
# leading/trailing whitespaces
if not line.strip():
data.append(current)
current = {}
# use line.split(':') if `:' does not appear in values
colon = line.find(':')
if colon == -1: # unknown format, throw an exception or just ignore it
continue
key = line[:colon]
value = line[colon+2:-1] # or line[colon1].strip() to remove trailing whitespace
current[key] = value
return data
import sys
if __name__ == "__main__":
with(open(sys.argv[1])) as input:
print load(input)
呃,这看起来不像CSV文件…CSV代表逗号分隔的值。在某些司法管辖区,分号或制表符也是可以接受的。这些都不在您的示例中。呃,这看起来不像CSV文件…CSV代表逗号分隔的值。在某些司法管辖区,分号或制表符也是可以接受的。这些都不在你的样品中。