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() 
相關問題