将python脚本概括为在目录中的所有文件上运行
我有以下python脚本:将python脚本概括为在目录中的所有文件上运行,python,Python,我有以下python脚本: with open('ein.csv', 'r') as istr: with open('aus.csv', 'w') as ostr: for line in istr: line = line.rstrip('\n') + ',1' print(line, file=ostr) 如何将其推广到在一个目录中的所有文件上运行,并为每个文件输出一个单独的文件 可能有这样一个功能: for phy
with open('ein.csv', 'r') as istr:
with open('aus.csv', 'w') as ostr:
for line in istr:
line = line.rstrip('\n') + ',1'
print(line, file=ostr)
如何将其推广到在一个目录中的所有文件上运行,并为每个文件输出一个单独的文件
可能有这样一个功能:
for phyle in list_files(.):
with open(phyle, 'r') as istr:
with open('ausput_xyz.csv', 'w') as ostr:
for line in istr:
line = line.rstrip('\n') + ',1'
print(line, file=ostr)
def list_files(path):
# returns a list of names (with extension, without full path) of all files
# in folder path
files = []
for name in os.listdir(path):
if os.path.isfile(os.path.join(path, name)):
files.append(name)
return files
只需将代码放入函数并调用它:
def process(infilename):
outfilename = os.path.splitext(infilename)[0] + "-out.csv"
with open(infilename, 'r') as istr:
with open(outfilename, 'w') as ostr:
for line in istr:
line = line.rstrip('\n') + ',1'
print(line, file=ostr)
def process_files(path):
for name in os.listdir(path):
if os.path.isfile(os.path.join(path, name)):
process(name)
在包含输入文件“abc.csv”、“xyz.csv”的目录中,此代码将创建名为“abc out.csv”和“xyz out.csv”的输出文件
请注意,
os.listdir(path)
在执行期间只调用一次,因此要处理的文件列表将不包括新创建的输出文件 只需将代码放入函数中并调用它:
def process(infilename):
outfilename = os.path.splitext(infilename)[0] + "-out.csv"
with open(infilename, 'r') as istr:
with open(outfilename, 'w') as ostr:
for line in istr:
line = line.rstrip('\n') + ',1'
print(line, file=ostr)
def process_files(path):
for name in os.listdir(path):
if os.path.isfile(os.path.join(path, name)):
process(name)
在包含输入文件“abc.csv”、“xyz.csv”的目录中,此代码将创建名为“abc out.csv”和“xyz out.csv”的输出文件
请注意,
os.listdir(path)
在执行期间只调用一次,因此要处理的文件列表将不包括新创建的输出文件 首先,作为处理csv
文件的一种更具python风格的方法,您最好使用csv
模块,并使用with
语句打开文件,在块结束时自动关闭文件对象。并使用os.walk()
函数迭代特定路径的文件和目录:
import csv
import os
for path_name, dirs, files in os.walk('relative_path'):
for file_name in files:
with open(file_name) as inp,open('{}.csv'.format(file_name),'wb') as out:
spamwriter = csv.writer(out, delimiter=',')
for line in inp:
spamwriter.writerow(line) # or line.split() with a specific delimiter
请注意,如果脚本与文件目录不在同一路径中,则可以在打开文件名时将路径添加到文件名的前导
with open(path_name+'/'+file_name),...
首先,作为处理
csv
文件的一种更具python风格的方式,您最好使用csv
模块,并使用with
语句打开文件,从而在块结束时自动关闭文件对象。并使用os.walk()
函数迭代特定路径的文件和目录:
import csv
import os
for path_name, dirs, files in os.walk('relative_path'):
for file_name in files:
with open(file_name) as inp,open('{}.csv'.format(file_name),'wb') as out:
spamwriter = csv.writer(out, delimiter=',')
for line in inp:
spamwriter.writerow(line) # or line.split() with a specific delimiter
请注意,如果脚本与文件目录不在同一路径中,则可以在打开文件名时将路径添加到文件名的前导
with open(path_name+'/'+file_name),...
你到底停留在哪一部分呢?我可以这样计算:
os.listdir(“somedirectory”)
但我想用短代码组件处理它们,所以?问题是什么?我不知道怎么做?你是想把它们都写到同一个文件中,还是让每个文件都输出到它自己的输出文件中?你到底坚持哪一部分?我可以这样计算:os.listdir(“somedirectory”)
但我想用那个短代码组件来处理它们,所以?问题是什么?我不知道怎么做?你是想把它们都写到同一个文件中,还是让每个文件都输出到自己的输出文件中?这太棒了-特别是关于调用os.listdir
,但是-我需要调用上面或下面的函数来执行代码,不是吗?你需要调用process\u文件(“/some/directory”)
来完成这项工作。这太棒了-特别是关于调用os.listdir
,但是-我需要调用上面或下面的函数来执行代码,不是吗?你需要调用处理文件(/some/directory”)
要做这项工作。@s.matthew.english抱歉,输入错误,应该是writer
再次检查。@s.matthew.english抱歉输入错误,应该是writer
再次检查。