Text 从CSV文件中提取文本

Text 从CSV文件中提取文本,text,csv,Text,Csv,我有一个CSV文件,只有一列,但有近1500条记录 我想从每个记录中提取信息,例如 “样品电池的电压为11.1V,容量为4500mAh” 我想提取11.1并放入另一个文件中,即在“voltage:”之后,在“V”之前。如果记录没有“voltage:”,我希望记录中有一个空行 我在Linux环境中,最简单的方法是什么 import csv source = open( "myfile.csv", "rb" ) rdr= csv.reader( source ) for row in rdr:

我有一个CSV文件,只有一列,但有近1500条记录

我想从每个记录中提取信息,例如

“样品电池的电压为11.1V,容量为4500mAh”

我想提取11.1并放入另一个文件中,即在“voltage:”之后,在“V”之前。如果记录没有“voltage:”,我希望记录中有一个空行

我在Linux环境中,最简单的方法是什么

import csv
source = open( "myfile.csv", "rb" )
rdr= csv.reader( source )
for row in rdr:
    print "The sample battery has a Voltage: %.1fV, and capacity: %dmAh" % ( float(row[0]), int(row[1]), )
将让您开始从CSV文件中提取数据


显然(根据评论)该文件如下所示

"The sample battery has a Voltage: 11.1V, and capacity: 4500mAh"
这可能是一个1列CSV。或者一行加上额外的引号。让我们假设它是一个1列CSV

import csv
import re
v_pat= re.compile(r' (\d+\.\d+)V' )
mah_pat = re.compile(r' (\d+)mAh' )
source = open( "myfile.csv", "rb" )
rdr= csv.reader( source )
for row in rdr:
   v_match= v_pat.search( row[0] )
   mah_match= mah_pat.search( row[0] )
   if v_match and mah_match:
       print v_match.group(1), mah_match.group(1)
   else:
       print # empty line -- not very informative

类似的东西可能是合适的。

我不太清楚你所说的单列CSV文件到底是什么意思;如果它只有一列,它不是一个文本文件吗

无论如何,如果每一行都像上面所示,并且我们有这样一个文件:

bash-3.2$ cat example.txt The sample battery has a Voltage: 11.1V, and capacity: 4500mAh The sample battery has some other info but no v entry The sample battery has a Voltage: 12.1V, and capacity: 4200mAh bash-3.2$ sed -e 's/.*Voltage: \([^V]*\)V.*/\1/' -e 's/^The.*//' < example.txt 11.1 12.1 bash-3.2$cat example.txt 样品电池的电压为11.1V,容量为4500mAh 样本电池有一些其他信息,但没有v条目 样品电池的电压为12.1V,容量为4200mAh 然后,您可以轻松地使用regexp删除11.1,并使用以下方法保留索引:

bash-3.2$ cat example.txt The sample battery has a Voltage: 11.1V, and capacity: 4500mAh The sample battery has some other info but no v entry The sample battery has a Voltage: 12.1V, and capacity: 4200mAh bash-3.2$ sed -e 's/.*Voltage: \([^V]*\)V.*/\1/' -e 's/^The.*//' < example.txt 11.1 12.1 bash-3.2$sed-e's/*电压:\([^V]*\)V.*/\1/'-e's/^The.*/'< example.txt 11.1 12.1
若我误解了非含电压线的格式,可以调整。请注意,我的表达式在格式方面非常脆弱,可以改进。还请注意,我没有包括报价,因为您的意图不清楚。上面的内容需要(简单地)调整才能使用它们。

您的文件似乎包含两列(其中有一个逗号),我是否理解正确?CSV中的每一行都与您描述的一样?因此,首先我们需要检查“Voltage:”和“V”是否存在,然后查找介于两者之间的数字并将其导出到另一个文件?Assaf,这取决于您是否遵循CSV约定,即引用语句是字符串,而不能包含逗号,这与我的意图正好相反。基本上,它是一个来自购物车的CSV文件(使用phpMyAdmin导出),而我想提取数字。因此,就像每当程序看到“Voltage:”时,它都会在它之后提取实数(本例中为浮点数)。请澄清您的问题,以包含此新信息。