Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.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
从CSV文件中提取数据';Python中的特定列_Python_Python 3.x_Csv_Opencsv_Read.csv - Fatal编程技术网

从CSV文件中提取数据';Python中的特定列

从CSV文件中提取数据';Python中的特定列,python,python-3.x,csv,opencsv,read.csv,Python,Python 3.x,Csv,Opencsv,Read.csv,我需要一个使用Python读取CSV文件并将其存储在“数据类型”文件中的快速帮助,以便在将所有数据存储在不同的文件中之后使用数据进行图形化 我已经搜索过了,但在所有情况下,我都发现数据中都有标题。我的数据不包含标题部分。它们是分开的。我只需要存储数据的特定列。例: 123456012345678@abcdef12365个位置 在这种情况下,作为示例,我只想存储“2345678@abcdef和“365”,以便将来使用它创建图形 此外,我在一个文件夹中有超过1个csv文件,我需要在每个文件夹中执行此

我需要一个使用Python读取CSV文件并将其存储在“数据类型”文件中的快速帮助,以便在将所有数据存储在不同的文件中之后使用数据进行图形化

我已经搜索过了,但在所有情况下,我都发现数据中都有标题。我的数据不包含标题部分。它们是分开的。我只需要存储数据的特定列。例:

123456012345678@abcdef12365个位置

在这种情况下,作为示例,我只想存储“2345678@abcdef和“365”,以便将来使用它创建图形

此外,我在一个文件夹中有超过1个csv文件,我需要在每个文件夹中执行此操作。我找到的消息来源没有提及此事,只是提到:

# open csv file
with open(csv_file, 'rb') as csvfile:
有人能告诉我已经回答过的问题,或者帮我解决吗

。在将所有数据存储在不同的文件中之后,将其存储在PY文件中以使用数据绘制图形

。我只想储存“2345678@abcdef和新python文件中的“365”

是否确实要将数据存储在python文件中?Python文件应该包含Python代码,它们应该可以由Python解释器执行。最好将数据存储在数据类型文件中(例如,
预处理的\u data.csv

要获得与模式匹配的文件列表,可以使用python的内置函数

下面是一个示例,说明如何读取目录中的多个csv文件,并从每个csv文件中提取所需的列:

导入全局
#要保留的列的索引
所需的_列=[1,4]
#将此更改为保存数据文件的目录
csv_directory='/path/to/csv/files/*.csv'
#迭代保存数据的文件
提取的_数据=[]
对于glob.glob(csv目录)中的文件名:
打开(文件名为“r”)作为数据文件:
尽管如此:
line=data\u file.readline()
#在文件末尾停止
如果len(line)==0:
打破
#用空格分隔行
tokens=line.split()
#只抓取我们关心的栏目
所需_数据=[所需_列中i的令牌[i]
提取的\u数据。追加(所需的\u数据)
将提取的数据写入新文件将很容易。以下示例显示如何将数据保存到csv文件

from collections import namedtuple    
import csv

# Setup named tuple to receive csv data
# p1 to p5 are arbitrary field names associated with the csv file
SomeData = namedtuple('SomeData', 'p1, p2, p3, p4, p5, p6')

# Read data from the csv file and create a generator object to hold a reference to the data
# We use a generator object rather than a list to reduce the amount of memory our program will use
# The captured data will only have data from the 2nd & 5th column from the csv file
datagen = ((d.p2, d.p5) for d in map(SomeData._make, csv.reader(open("mydata.csv", "r"))))

# Write the data to a new csv file
with open("newdata.csv","w", newline='') as csvfile:
    cvswriter = csv.writer(csvfile, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)

    # Use the generator created earlier to access the filtered data and write it out to a new csv file
    for d in datagen:
        cvswriter.writerow(d)
output_string=''
对于提取的_数据中的行:
输出字符串+=','。连接(行)+'\n'
以打开('./预处理的_data.csv',w')作为csv_文件:
csv_file.write(输出_字符串)
编辑:

如果您不想合并所有csv文件,以下是一个可以一次处理一个文件的版本:

def进程文件(输入路径、输出路径、选定列):
提取的_数据=[]
打开(输入_路径,'r'),如_文件中所示:
尽管如此:
line=in_file.readline()
如果len(line)==0:中断
tokens=line.split()
提取的\u数据。追加([所选\u列中i的标记[i])
输出字符串=“”
对于提取的_数据中的行:
输出字符串+=','。连接(行)+'\n'
打开(输出路径“w”)作为输出文件:
out\u file.write(输出\u字符串)
#每当您需要处理文件时:
进程文件(
“/path/to/input.csv”,
“/path/to/processed/output.csv”,
[1, 4])
#如果要处理目录中的每个文件:
target_directory='/path/to/my/files/*.csv'
对于glob.glob(目标目录)中的文件:
进程_文件(文件,文件+'.out',[1,4])
编辑2:

以下示例将处理目录中的每个文件,并将结果写入另一个目录中具有类似名称的输出文件:

导入操作系统
导入glob
输入目录='/path/to/my/files/*.csv'
输出目录='/path/to/output'
对于glob.glob(输入目录)中的文件:
file_name=os.path.basename(文件)+'.out'
out\u file=os.path.join(输出目录、文件名)
进程文件(文件,输出文件[1,4])
如果要向输出中添加标题,则可以如下修改
process\u file

def进程文件(输入路径、输出路径、选定列、列标题=[]):
提取的_数据=[]
打开(输入_路径,'r'),如_文件中所示:
尽管如此:
line=in_file.readline()
如果len(line)==0:中断
tokens=line.split()
提取的\u数据。追加([所选\u列中i的标记[i])
输出字符串=','。连接(列标题)+'\n'
对于提取的_数据中的行:
输出字符串+=','。连接(行)+'\n'
打开(输出路径“w”)作为输出文件:
out\u file.write(输出\u字符串)

这里有另一种方法,它使用namedtuple来帮助从csv文件中提取选定字段,然后将它们写入新的csv文件

from collections import namedtuple    
import csv

# Setup named tuple to receive csv data
# p1 to p5 are arbitrary field names associated with the csv file
SomeData = namedtuple('SomeData', 'p1, p2, p3, p4, p5, p6')

# Read data from the csv file and create a generator object to hold a reference to the data
# We use a generator object rather than a list to reduce the amount of memory our program will use
# The captured data will only have data from the 2nd & 5th column from the csv file
datagen = ((d.p2, d.p5) for d in map(SomeData._make, csv.reader(open("mydata.csv", "r"))))

# Write the data to a new csv file
with open("newdata.csv","w", newline='') as csvfile:
    cvswriter = csv.writer(csvfile, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)

    # Use the generator created earlier to access the filtered data and write it out to a new csv file
    for d in datagen:
        cvswriter.writerow(d)
“mydata.csv”中的原始数据:

在“newdata.csv”中输出数据:

编辑1: 对于制表符分隔的数据,请对代码进行以下更改:
更改
datagen=((d.p2,d.p5)表示地图中的d(SomeData.\u make,csv.reader(open)(“mydata.csv”,“r”)))


datagen=((d.p2,d.p5)表示地图中的d(SomeData.make,csv.reader(open(“mydata2.csv”,“r”),delimiter='\t',quotechar='”))


cvswriter=csv.writer(csvfile,delimiter=',',quotechar='”,quoting=csv.QUOTE_-MINIMAL)



cvswriter=csv.writer(csvfile,分隔符='\t',quotechar=''”,quoting=csv.QUOTE\u最小值)

请查看此帖子,它可能会有所帮助you@hiroprotagonist谢谢你的链接!@DipakMallick在我从事这个项目期间,链接对我很有帮助。谢谢你让我知道你是对的,我并不是说我想把它们存储在Python文件中。我想把它们存储在一个文件中,以后我可以用它们来创建图表。例如你的代码
2345678@abcdef,365  
876@def,200