我想读取1.sec,2.sec,3.sec ..............等文件夹中的文件。在进行一些转换之后,我必须将它分别写入1.csv,2.csv,3.csv ..............但是我的代码要么在单个csv中产生结果,要么抛出错误在filenamr中。请为我建议一个解决方案。
代码:
import glob
import os,io,sys
import zipfile,gzip
import StringIO,string
import numpy as np
import csv as csv
import pandas as pd
import random
import decimal
from pandas import Series, DataFrame
from datetime import datetime
import natsort
from natsort import natsorted
path = 'C://test//08October2014//DATA_INTV_NEW//Oct0814//*.sec.gz'
files=glob.glob(path)
for file in natsorted(files):
#print list
f = gzip.open(file, 'rb')
a=f.read()
def stripped(x):
return "".join([i for i in x if 31 < ord(i) < 127])
b = stripped(a)
if 'OPT' in b:
c=string.split(b, 'OPT')
#Stripped Opt symbol is added again
for line in c:
if line[0:2]!='FUT':
line='OPT'+line
d=line
#Split lines into lines wrt Futures
if 'FUT' in d:
e=string.split(d,'FUT')
#Stripped fut symbol is added again
for line1 in e:
if line1[0:2]!='OPT':
line1='FUT'+line1
#Separating the fields using Comma
i=0
#Conversion to list
g=[line]
for g[i] in g:
if (i==5 or i==16 or i==28 or i==39 or i==42 or i==44 or i==55 or i==68 or i==79 or i==92 or i==103 or i==116 or i==127 or i==139 or i==150 or i==161 or i==172 or i==183 or i==194 or i==205 or i==216 or i==228):
g.insert(i+1,",")
i+=1
#Conversion back to string
h="".join(g)
#print h
#Writing into .txt or .csv file
fn=open("C://test//08October2014//DATA_INTV_NEW//Oct0814//*.csv","wb")
fn.write(h + '\n')
fn.close
输出:
IOError Traceback (most recent call last)
<ipython-input-3-9d5be8384154> in <module>()
81
82 #Writing into .txt or .csv file
---> 83 fn=open("C://test//08October2014//DATA_INTV_NEW//Oct0814//*.csv","wb")
84 fn.write(h + '\n')
85 fn.close
IOError: [Errno 22] invalid mode ('wb') or filename: 'C://test//08October2014//DATA_INTV_NEW//Oct0814//*.csv'
答案 0 :(得分:1)
要获取输出文件名,请使用输入文件名中的数字
import os
num, ext = os.path.basename(file).split(".", 1)
output_filename = os.path.join(os.path.dirname(file), "%s.csv" % (num,))
注意,避免使用file
作为变量名,因为这是在python中构建的,你正在隐藏
答案 1 :(得分:0)
我很确定你不能使用* .csv top打开目录中的所有文件。
使用类似的东西:
import os.path
fileslist=[]
for root, dirs, files in os.walk(directorypath):
for i in files:
fileslist.append(os.path.join(root, i))
然后你会得到fileslist
所有你需要的文件。