Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python CSV刮削_Python_Csv_Scrape_Import From Csv - Fatal编程技术网

Python 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等,则会更容易,然后我

我有一个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等,则会更容易,然后我会知道如何正确地处理这些信息

我是这样开始的:

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代表逗号分隔的值。在某些司法管辖区,分号或制表符也是可以接受的。这些都不在你的样品中。