如何在退出后从脚本的开头开始?

时间:2018-05-17 14:21:10

标签: python xml pandas

我有很多xml文件,我想从中提取一些信息,但有些文件不包含任何信息。因此,当我在一个空文件上运行我的脚本然后我停止我的脚本。但是如果当前文件为空,我不知道在我的目录中获取下一个文件。 在我的脚本的一小部分下面。

from lxml import etree as ET
import pandas as pd
import glob
import sys
import os

path = 'C:\Users\sky\Documents'
# Read all xml files of directory
for filename in glob.glob(os.path.join(path, '*.xml')):
    tree = ET.parse(filename)
    root = tree.getroot()



# Extract all books 
books = [ ]
for book in root.findall('.//Book/Message//'):
    name = book.find('Name').text
    if name is not None:
        books.append(name) 

df_final = pd.DataFrame(books, columns=['Book'])

if df_final.Book.count() == 0:
    sys.exit('No Book was found!')
    # how to take next file in my directory ?
authors= []
for auth in root.findall('./Book/Message/author'):
    if auth.attrib != {}:
        author = number.get('name')
        authors.append(author)

# I have  many loops like these two
df_final['Author'] = pd.DataFrame(authors)      


if os.path.isfile('books.csv') is False: 
    df_final.to_csv('books.csv', sep=',', mode='w', header=True, index=False) 

else: 
    df_final.to_csv('books.csv', sep=',', mode='a', header=False, index=False)
    print '\n', ' File Processed Successfully!', '\n'

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

我会用句子“试试”。如果你有一个打开xml文件的循环,它会尝试打开该文件,如果它没有退出,则传递并且不会引发错误。

for ...
    try:
       (action)
    except:
        pass #(or another action)

答案 1 :(得分:0)

为了在出现错误时保持循环,你可以这样做

Table2

除此之外,我怀疑以下代码应放在上面的Table2循环中。

for filename in glob.glob(os.path.join(path, '*.xml')):
    try:
        tree = ET.parse(filename)
        root = tree.getroot()
    except:
        continue

否则,for仅适用于最后一个.xml文件。

所以,我怀疑你的代码应该是这样的

books = [ ]
for book in root.findall('.//Book/Message//'):
    name = book.find('Name').text
    if name is not None:
        books.append(name)