Script Python se ejecutan en los subdirectorios

biohacker:

Tengo un directorio padre con subdirectorios, cada uno de ellos contiene un archivo html en el que quiero correr mi código. Esto toma un archivo html y exportará un archivo CSV con datos de la tabla respectiva.

He intentado dos enfoques principales, pero no trabajan apropiadamente porque no es capaz de encontrar el archivo .html en consecuencia (inexistente). Nota: El nombre de cada archivo en el subdirectorio será siempre index.html

Línea de comandos de Linux (Basado utilizando Code1)

for file in */; do for file in *.html; do python html_csv2.py "$file"; done; done

Código 1:

name = 'index.html'
html = utils.getFileContent(name)
#Get data from file
doc = SimplifiedDoc(html)
soup = bs(html, 'lxml')

title = (soup.select_one('title').text)
title = title.split(' -')
strain = title[0]
rows = []
tables = doc.selects('table.region-table')
tables = tables[:-1]
#print (type(tables))
for table in tables:
    trs = table.tbody.trs
    for tr in trs:
        rows.append([td.text for td in tr.tds])
#print(rows)
#print(type(rows))
#print("PANDAS DATAFRAME")
df_rows = pd.DataFrame(rows)
df_rows.columns = ['Region', 'Class', 'From', 'To', 'Associated Product', 'Class', 'Similarity']
df_rows['Strain'] = strain
df_rows = df_rows[['Strain','Region', 'Class', 'From', 'To', 'Associated Product', 'Class', 'Similarity']] 
#print(df_rows)
df_rows.to_csv (r'antismash_html.csv', index = False, header=True)
print('CSV CREATED')

En este segundo fragmento que estoy tratando de utilizar la biblioteca OS para entrar en cada sub-directorio en consecuencia.

Código 2:

import csv
from simplified_scrapy import SimplifiedDoc,req,utils
import sys
import pandas as pd
import lxml.html
from bs4 import BeautifulSoup as bs
import os

name = 'index.html'
html = utils.getFileContent(name)
# Get data from file
doc = SimplifiedDoc(html)
soup = bs(html, 'lxml')

cwd = os.getcwd()
print(cwd)
directory_to_check = cwd # Which directory do you want to start with?

def directory_function(directory):
      print("Listing: " + directory)
      print("\t-" + "\n\t-".join(os.listdir("."))) # List current working directory

# Get all the subdirectories of directory_to_check recursively and store them in a list:
directories = [os.path.abspath(x[0]) for x in os.walk(directory_to_check)]
directories.remove(os.path.abspath(directory_to_check)) #Dont' want it done in my main directory

def csv_create(name):
    title = (soup.select_one('title').text)
    title = title.split(' -')
    strain = title[0]
    rows = []
    tables = doc.selects('table.region-table')
    tables = tables[:-1]
    #print (type(tables))
    for table in tables:
        trs = table.tbody.trs
        for tr in trs:
            rows.append([td.text for td in tr.tds])
    #print(rows)
    #print(type(rows))
    #print("PANDAS DATAFRAME")
    df_rows = pd.DataFrame(rows)
    df_rows.columns = ['Region', 'Class', 'From', 'To', 'Associated Product', 'Class', 'Similarity']
    df_rows['Strain'] = strain
    df_rows = df_rows[['Strain','Region', 'Class', 'From', 'To', 'Associated Product', 'Class', 'Similarity']] 
    #print(df_rows)
    df_rows.to_csv (r'antismash_html.csv', index = False, header=True)
    print('CSV CREATED')
    #with open(name +'.csv','w',encoding='utf-8') as f:
    #    csv_writer = csv.writer(f)
    #    csv_writer.writerows(rows)

for i in directories:
      os.chdir(i)         # Change working Directory
      csv_create(name)      # Run your function


directory_function
#csv_create(name)

He intentado utilizar el ejemplo aquí: Python: script que se ejecuta en todos los subdirectorios , pero no era capaz de ejecutar en consecuencia.

dabingsou:

Prueba esto.

import os
from simplified_scrapy import utils
def getSubDir(name,end=None):
  filelist = os.listdir(name)
  if end:
    filelist = [os.path.join(name,l) for l in filelist if l.endsWith(end)]
  return filelist
subDir = getSubDir('./') # The directory which you want to start with
for dir in subDir:
  # files = getSubDir(dir,end='index.html')
  fileName = dir+'/index.html'
  if not os.path.isfile(fileName): continue
  html = utils.getFileContent(fileName)

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=280890&siteId=1
Recomendado
Clasificación