2011-11-17 75 views
3

我有一個列表.dbf文件,我想更改爲.csv文件。我用Excel打開它們,並將它們重新保存爲.csv,但這需要太多時間。如何重命名文件並更改文件類型?

現在我創建了一個腳本來更改文件名,但是當我打開它時,它仍然是一個.dbf文件類型(儘管它被稱爲.csv)。如何以文件類型也改變的方式重命名文件?

我的腳本使用(使用DBF和CSV文件名是在一個單獨的CSV文件中列出):

IN = dbffile name 
OUT = csvfile name 

for output_line in lstRename: 
    shutil.copyfile(IN,OUT) 
+2

簡單地改變文件名不會做任何該文件的內容。當您在Excel中執行「另存爲」時,除了名稱外,實際上它正在更改保存文件的格式。 – mmc

+2

將DBF文件轉換爲CSV聽起來像「從平底鍋裏逃出來的火」給我;你失去了所有類型(數字,字符,日期,布爾值,NULL)信息。這些CSV文件的用戶是什麼?如果它是電子表格應用程序或數據庫加載,那麼最好直接執行......使用DBF閱讀Python模塊逐個獲取正確類型的數據,執行任何必要的操作,並使用特定於目標的Python輸出模塊。 –

回答

-2

可能是新文件名是「xzy.csv.dbf」。通常在C#中,我把引號放在文件名中。這迫使操作系統更改文件名。嘗試使用引號中的「Xzy.csv」。

+0

dbf沒有與csv相同的格式,因此您需要將其轉換爲@HerrSerker狀態。 – cederlof

+0

我也會嘗試,因爲實際上我所有的同事都應該運行腳本(不需要下載額外的轉換器)。 – user1051906

+0

我試過了,是的蟒蛇不喜歡額外的引號:) – user1051906

2

如果您曾經使用過VB或查看過VBA,您可以編寫一個簡單的excel腳本來打開每個文件,將其另存爲csv,然後用新名稱保存。

使用宏記錄器自己記錄一次,然後編輯生成的腳本。

我現在已經創建了一個可以自動執行此操作的應用程序。其名爲xlsto(查找xls.exe發行文件)。它允許您選擇一個文件夾並將所有xls文件轉換爲csv(或任何其他類型)。

+0

這聽起來不錯,但不幸的是我從來沒有使用過VB( Python是我第一次嘗試編程:) :) – user1051906

+0

對此,你需要自動化excel,VBA是最簡單的方法。 –

+0

除Excel之外還有其他方法。 –

6

更改文件的名稱(並且擴展名只是完整名稱的一部分)對文件的內容完全沒有影響。你需要以某種方式將內容從一種格式轉換爲另一種格式。

使用my dbf modulepython這是很簡單的:

import dbf 

IN = 'some_file.dbf' 
OUT = 'new_name.csv' 

dbf.Table(IN).export(filename=OUT) 

這將創建一個.csv文件,實際上是CSV格式。

0

這取決於你想要做什麼。看起來你想要將文件轉換爲其他類型。那裏有很多轉換器,但是單獨一臺計算機並不知道每種文件類型。爲此,您需要下載一些軟件。如果您只想更改文件擴展名 (例如.png,.doc,.wav),則可以將計算機設置爲可以更改名稱和擴展名。我希望我幫助以某種方式:)

-1

descargar書店dbfpy desde http://sourceforge.net/projects/dbfpy/?source=dlp

import csv,glob 
from dbfpy import dbf 

entrada = raw_input(" entresucarpetadbf ::") 


lisDbf = glob.glob(entrada + "\\*dbf") 
for db in lisDbf: 
    print db 
    try: 
     dbfFile = dbf.Dbf(open(db,'r')) 
     csvFile = csv.writer(open(db[:-3] + "csv", 'wb')) 

     headers = range(len(dbfFile.fieldNames)) 

     allRows = [] 
     for row in dbfFile: 
      rows = [] 
      for num in headers: 
       rows.append(row[num]) 
      allRows.append(rows) 

     csvFile.writerow(dbfFile.fieldNames) 
     for row in allRows: 
      print row 
      csvFile.writerow(row) 

    except Exception,e: 
     print e