2009-06-26 44 views
2

我一直在做一些基本的饲料加工。所以,通过ftp获取文件,处理它(即获得我关心的字段),然后更新本地数据库。同样的方向:从数据库获取数据,创建文件,并通过FTP上传。脚本将由cron调用。获取远程文本文件,进程和更新数据库 - 使用的方法和脚本语言?

我认为这个想法是对每种类型的饲料,定义了FTP连接/文件信息。然后应该翻译文件中的数据字段与应用程序可以使用的数据字段之间的关系(当然也可以处理该翻译)。另外编写单独的脚本,为可能用于不同提要的不同对象执行通用插入功能。

作为电子商务的例子,可以说,我与不同的供应商谁给我提供饲料工作。供稿可以是不同的(对象)类型:产品,类别或订单信息。对于每种类型的Feed,我显然都使用不同的字段并调用不同的更新或插入脚本。

什么是最好的语言来实现它?我可以使用PHP,但是我正在寻找一个开始学习Perl或Python的项目,所以这对我也很有用。

如果使用Perl或Python,可以简要地给出高层次的实现。那么如何来分隔不同的脚本,面向对象的方法?如何可以很容易地在未来实现新的饲料或加工功能等

[全文披露:编写PHP这在我以前已经有一些类最近创建一个新的Feed。我已经完成了我的工作,但是这太麻烦了,很难做到。所以这个问题不是“请帮我做我的工作”,而是为我自己发展的一个“最佳方法”类型的问题。]

谢谢!

回答

2

“最好”的语言很主观。 Python通常被认为易于学习和易于阅读,而Perl经常被开玩笑地称为“只写”语言。另一方面,Perl广泛用于网络管理。 Python往往更多地用于大型系统管理或编程。两者都有卓越的领域,以及他们不擅长的领域。

两种语言都可以让你很容易地解决你的问题。他们都拥有所有必需的模块,既可以是捆绑的库,也可以很容易地获得。

如果我使用Python我会使用ConfigParser

http://docs.python.org/library/configparser.html#module-ConfigParser

存储每个项目的设置,FTPLIB:

http://docs.python.org/library/ftplib.html

交谈的FTP服务器,许多数据库库之一。例如,假设您正在使用的Postgres:

http://www.pygresql.org/

最后的命令行选项,我会使用Python自带的绝佳选择解析器模块:

http://docs.python.org/library/optparse.html#module-optparse

从代码的角度来看我会有以下对象:

# Reads in a config file, decides which feed to use, and passes 
# the commands in to one of the classes below for import and export 
class FeedManager 

# Get data from db into a canonical format 
class DbImport 

# Put data into db from a canonical format 
class DbExport 

# Get data from ftp into a canonical format 
class FtpImport 

# Put data into ftp from canonical format 
class FtpExport 

每个类翻译t来自可以交给其他补充类别之一的规范格式。

配置文件可能是这样的:

[GetVitalStats] 
SourceUrl=ftp.myhost.com 
SourceType=FTP 

Destination=Host=mydbserver; Database=somedb 
SourceType=Postgres 

最后,你会说它是这样的:

process_feed.py --feed=GetVitalStats 
+0

+1:好。除了一件事:configparser是无用的。只需编写Python代码。由于Python被解释,你并不需要单独的配置文件。这很简单,你可以早点起床并跑步。 “ – 2009-06-26 17:00:59

+0

”Perl广泛用于网络管理,Python往往更多地用于系统管理或编程...“ 所以我认为在这个问题上,ftp的文件相对更简单,它更多的是关于什么是最好的解析文本文件和数据库数据。 – safoo 2009-06-26 17:35:02

1

大多数现代语言脚本语言允许您执行所有这些操作。因此,我认为您选择的语言应该基于您和读过您的代码的人所了解的内容。

在Perl我使用以下模块:

的Net :: FTP访问FTP站点。 DBI将数据插入到数据库中。

模块就像是代码,您不必写了,相互作用FTP网站和数据库,可重复使用的漂亮作品是如此普遍,每一个现代的脚本语言应该有类似的模块。

我不认为PHP是一个伟大的语言,所以我想如果可能避免它,但如果你有很多的经验,它可能使你的感觉。

+0

谢谢。我知道PHP,但这个问题是一个借口,开始学习另一种语言的过程,以及使用正确的方法/语言来解决这类常见问题。 – safoo 2009-06-26 17:31:46

3

类取决于文件的格式,你的FTP” ING。如果这是一种疯狂的专有格式,那么您可能会被任何已经有图书馆管理的语言卡住。如果它是CSV或XML,那么任何语言都可以。

就像例子。它看起来很直截了当,但我几乎每天都会做Perl ;-)

1

Python

1st。这些FTP'd文件是什么格式?我会假设他们是CSV。

2nd。你怎么知道什么时候运行FTP获取?固定时间表?事件?我会认为这是一个固定的时间表。你将使用cron来控制它。

您有三个问题:FTP获取,数据提取,数据库加载。

ftp_get_load.py

import ftplib 
import csv 
import someDatabaseAPI as sql 

class GetFile(object): 
    ... general case solution using ftplib ... 

class ExtractData(object): 
    ... general case solution using csv ... 

class LoadDB(object): 
    ... general case solution using sql ... 

some_load。py

import ftp_get_load 

class UniqueExtractor(ftp_get_load.ExtractData): 
    ... overrides ... 

get = GetFile(url, filename, etc.) 
extract = UniqueExtractor(filenamein, filenameout, etc.) 
load = LoadDB(filename, etc.) 

if __name__ == "__main__": 
    get.execute() 
    extract.execute() 
    load.execute() 
相关问题