文章出處

讀文件

pd.read_csv('path/to/file.txt',header=0,names='ab',index_col=0)

names Columns這個可以不寫,制定索引列是第一列,這樣就沒有序號

寫文件

dataframe.to_csv('d:/python/end.txt')

dataframe

類似于二維列表
充分利用map函數

df.a=df.a.map(function)

修改一列的值

篩選列

new_dataframe = df[df.a!='']

這種辦法可以篩選得到新的df
自動迭代

處理

def getPhoneNumFromFile(fobj):
    regex = re.compile(r'1\d{10}', re.IGNORECASE)
    phonenums = re.findall(regex, fobj)
    #print phonenums
    if len(phonenums)==1:
        return phonenums[0]
    else:
        return ''

充分體現了輪子的重要性
如果是一個熟練人員幾分鐘就搞定了

#! /usr/bin/env python
# -*- coding:utf-8   -*-
# __author__ == "xpro"
import pandas as pd
import re,optparse,os

def getPhoneNumFromFile(fobj):
    regex = re.compile(r'1\d{10}', re.IGNORECASE)
    phonenums = re.findall(regex, fobj)
    #print phonenums
    if len(phonenums)==1:
        return phonenums[0]
    else:
        return ''

def main():
    p = optparse.OptionParser()

    p.add_option('--source', '-s', default="d:/python/telpwd.txt", help=u'要處理的文件路徑') #應該對文件進行驗證判斷是否存在
    p.add_option('--dist', '-d', default="d:/python/dis.txt", help=u'輸出文件路徑') #驗證目錄是否可以寫
    #如果用戶使用的是默認的應該給出提示
    options, arguments = p.parse_args()
    df = pd.read_csv(options.source, header = 0)

    df.a = df.a.map(getPhoneNumFromFile)

    df = df[df.a != '']
    print 'wirting ro text file...'
    df.to_csv(options.dist)

if __name__ == '__main__':

    main()

下面是不是用pandas自己寫的版本

#! /usr/bin/env python
# -*- coding:utf-8   -*-
# __author__ == "tyomcat"
import re,optparse,os,time

p = optparse.OptionParser()
p.add_option('--source', '-s', default="d:/python/telpwd.txt",help=u'要處理的文件路徑')
p.add_option('--dist', '-d', default="d:/python/dis.txt",help=u'輸出文件路徑')

options, arguments = p.parse_args()


print u'默認路徑: %s' % options.source
print u'默認輸出文件路徑: %s' % options.dist
raw_input()

#大家自己處理txt文本的時候,只要重寫這個函數就好了
def getPhoneNumFromFile(fobj):
    regex = re.compile(r'1\d{10}', re.IGNORECASE)
    phonenums = re.findall(regex, fobj)
    #print phonenums
    return phonenums
file = open(options.source)

output = []
start = time.clock()
start2 = time.time()
lines = 0
while 1:

    line = file.readline()
    lines += 1
    if not line:
        break
    arr = line.strip().split('----')

    rst = getPhoneNumFromFile(arr[0])

    if rst:
        temp = [rst[0]]
        if len(arr) == 2:
            temp.append(arr[1])


        print 'line ',lines,len(output), temp, time.clock() - start

        print line
        output.append(temp)
 # do something

rstfile = open(options.dist,'w')

for x in output:
    #x[1] += '\n'
    #print x[0] + '----' + x[1] + '\n'
    if len(x) == 2:
        rstfile.write(x[0] + '----' + x[1] + '\n')
    # else:
    #     rstfile.write(x[0] + '----'  + '\n')

print u'文件輸出到: '+options.dist
end2 = time.time()
end = time.clock()


print u'程序用時cpu:',end - start
print u'程序用時:',end2 - start2

raw_input()

效率差別那是極大的,這個要3個多小時,上面要十幾秒


文章列表


不含病毒。www.avast.com
全站熱搜
創作者介紹
創作者 大師兄 的頭像
大師兄

IT工程師數位筆記本

大師兄 發表在 痞客邦 留言(0) 人氣()