遍历文件并在Python中应用功能

时间:2019-04-26 01:49:15

标签: python operating-system subprocess

我有一些dxf文件,想将它们转换为geojson文件:

import subprocess
from subprocess import call
import os

working_directory = 'D:/dxf_files/'

for subdir, dirs, files in os.walk(working_directory):
    for file in files:
        if file.endswith('.dxf'):
            print(file)

输出:

BJ-SZZDS-1010084246-dongta-11.dxf
BJ-SZZDS-1010084246-dongta-12.dxf
BJ-SZZDS-1010084246-dongta-17.dxf
BJ-SZZDS-1010084246-dongta-18.dxf
BJ-SZZDS-1010084246-dongta-19.dxf
...

我想将每个文件放在下面的input_file中,通过替换文件的扩展名使output_file的文件名与input_file相同。现在,两个代码块是分开的,如何将它们组合在一起?感谢您的提前帮助。

input_file = 'BJ-SZZDS-1010084246-dongta-11.dxf'
output_file = 'BJ-SZZDS-1010084246-dongta-11.geojson'

def dxf2geojson(output_file, input_file):
    command = ['ogr2ogr', '-f', 'GeoJSON', output_file, input_file]
    p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    return p
dxf2geojson(output_file, input_file)  

3 个答案:

答案 0 :(得分:1)

首先,您可以将所有文件名保存在列表中,例如file_list

import subprocess
from subprocess import call
import os

working_directory = 'D:/dxf_files/'

file_list = []   # define file_list to save all dxf files
for subdir, dirs, files in os.walk(working_directory):
    for file in files:
        if file.endswith('.dxf'):
            file_list.append(file)   # save the filenames in file_list

然后,执行file_list中的每个文件:

def dxf2geojson(output_file, input_file):
    command = ['ogr2ogr', '-f', 'GeoJSON', output_file, input_file]
    p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    return p

for input_file in file_list:
    f = input_file[:-4]  # to omit .dxf
    output_file = f + '.geojson'    # add file extension .geojson
    dxf2geojson(output_file, input_file)  

答案 1 :(得分:1)

您可以将所有文件保存到列表中,然后对其进行遍历。

export ORACLE_HOME=/wherever/oracle18-instantclient/instantclient_18_5
export LD_LIBRARY_PATH="$ORACLE_HOME:/usr/lib/x86_64-linux-gnu/"

答案 2 :(得分:1)

您可以通过将文件迭代代码中的打印功能替换为转换功能来实现。

import subprocess
from subprocess import call
import os

working_directory = 'D:/dxf_files/'

for subdir, dirs, files in os.walk(working_directory):
    for file in files:
        if file.endswith('.dxf'):
            input_file = file
            output_file = file[:-3]+'geojson'
            P = dxf2geojson(output_file, input_file)