Python 搜索列

标签 python loops csv datetime

我有一个 CSV 文件,我需要以特定模式循环遍历特定列,并将输出模式存储在具有相同名称 +“_pattern”+ [1,2,3,etc.] 的新文件中+.csv.

这是搜索模式:循环遍历第 1 列并找到相同的 # 并抓取它们,然后循环遍历抓取列表的第 2 列,然后抓取第 2 列中具有相同日期的所有内容,然后转到第 4 列,然后抓取所有不相同的 #s,然后使用按列时间组织的第 1 列、第 2 列和第 4 列的模式创建一个文件。

示例:

1       2           time    4
13.45   9/29/2016   6:00    98765
12.56   9/29/2016   6:05    76548
13.45   9/29/2016   6:07    98764
13.45   9/29/2016   6:21    98766
13.45   9/29/2016   6:20    96765
12.56   9/29/2016   6:06    76553

Better view of table

结果将是,file_pattern_1.csv 将具有:

1. 13.45    9/29/2016   6:00    98765
2. 13.45    9/29/2016   6:07    98764
3. 13.45    9/29/2016   6:21    98766

但不会包括:

4. 13.45    9/29/2016   6:20    96765 

因为第 4 列与之前的条目重复,file_pattern_2.csv 将具有:

1. 12.56    9/29/2016   6:05    76548
2. 12.56    9/29/2016   6:06    76553

这是我目前所拥有的,但我已经迷失在循环逻辑中:

import os

infile = raw_input("Which file are we working with? ")
assert os.path.exists(infile), "Path is incorrect."
os.chdir(infile)

def createFile(csvFile, fileName):
    with open (fileName, 'wb') as ftext:
        ftext.write(csvFile)

def appendFile(csvFile, fileName):
    with open (fileName, 'a') as ftext:
        ftext.write(csvFile)

def setfilename(tread):
    fileName = tread[0:tread.index('.')] + '_patterns' + str(countItem) + '.csv'
    return fileName

for i in pcolumn:
    if pcolumn == pcolumn:
        return pfile
    for x in date:
        if date == date:
            return date
            for a in acolumn:
                if acolumn != acolumn:
                    createFile(fileName)
else:
    print "Finished."

最佳答案

下面应该做你需要的。它读取一个 csv 文件并为每个条目生成一个匹配的 datetime 以允许它们被正确排序。它根据模式编号创建输出 csv 文件,条目按日期排序。已看到的第 4 列条目被省略:

from itertools import groupby
from datetime import datetime
import csv
import os

filename = 'my_data.csv'
data = []

with open(filename, 'rb') as f_input:
    csv_input = csv.reader(f_input, delimiter='\t')
    header = next(csv_input)

    for row in csv_input:
        dt = datetime.strptime('{} {}'.format(row[2], row[1]), '%H:%M %m/%d/%Y')
        data.append([dt] + row)

for index, (k, g) in enumerate(groupby(sorted(data, key=lambda x: x[1]), key=lambda x: x[1]), start=1):
    line = 1
    seen = set()

    with open('{}_pattern_{}.csv'.format(os.path.splitext(filename)[0], index), 'wb') as f_output:
        csv_output = csv.writer(f_output)

        for item in sorted(g, key=lambda x: x[0]):
            if item[4] not in seen:
                seen.add(item[4])
                csv_output.writerow([line] + item[1:])
                line += 1

关于Python 搜索列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40008998/

相关文章:

c++ - 写入视频文件并同时播放

python - Exchangelib 库不下载 html 格式的电子邮件正文

java - 让项目更加OO Java

node.js - 带有 promise 的while循环

MYSQL+加载数据INFILE+检查字段

python - 如何防止 Python 脚本中的 ANSI 转义序列干扰我的 zsh RPROMPT 和光标位置?

python - 根据索引和列合并/连接两个数据框

c++ - 无括号循环内以逗号分隔的代码行

python - 将多个不同数据类型的 Numpy 数组写入 CSV 文件的列

python - 将数据从 Google App Engine 导出到 csv