【问题标题】:How to rename files and change the file type as well?如何重命名文件并更改文件类型?
【发布时间】:2011-12-31 09:05:45
【问题描述】:

我有一个包含.dbf 文件的列表,我想将其更改为.csv 文件。我手动在 excel 中打开它们并将它们重新保存为.csv,但这需要太多时间。

现在我做了一个脚本来更改文件名,但是当我打开它时,它仍然是.dbf 文件类型(虽然它被称为.csv)。如何重命名文件以使文件类型也发生变化?

我的脚本使用(dbf 和 csv 文件名列在单独的 csv 文件中):

IN = dbffile name
OUT = csvfile name

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

【问题讨论】:

  • 仅仅更改文件名不会对文件内容产生任何影响。当您在 Excel 中执行“另存为”时,除了名称之外,它实际上是在更改文件保存的格式。
  • 将 DBF 文件转换为 CSV 对我来说听起来像是“从煎锅里逃到火里”;您会丢失所有类型(数字、字符、日期、布尔值、NULL)信息。这些 CSV 文件的使用者是什么?如果它是电子表格应用程序或数据库加载,最好直接使用...使用读取 DBF 的 Python 模块一次获取正确类型的数据,执行任何必要的操作,并使用特定于目标的 Python输出模块。

标签: python excel csv rename dbf


【解决方案1】:

你需要一个转换器

在谷歌中搜索dbf2csv。

【讨论】:

    【解决方案2】:

    新文件名可能是“xzy.csv.dbf”。通常在 C# 中,我在文件名中加上引号。这会强制操作系统更改文件名。尝试使用引号中的“Xzy.csv”之类的内容。

    【讨论】:

    • dbf 的格式与 csv 不同,因此您需要将其转换为 @HerrSerker 状态。
    • 我也会尝试,因为实际上我所有的同事都应该运行脚本(无需下载额外的转换器)。
    • 所以恐怕我需要 dbfpy(让我所有的同事都知道他们必须下载它..
    【解决方案3】:

    如果您曾经使用过 VB 或研究过 VBA,您可以编写一个简单的 excel 脚本来打开每个文件,将其保存为 csv,然后用新名称保存。

    使用宏记录器记录您自己完成一次,然后编辑生成的脚本。

    我现在创建了一个自动执行此操作的应用程序。它被称为xlsto(查找 xls.exe 发布文件)。它允许您选择一个文件夹并将所有 xls 文件转换为 csv(或任何其他类型)。

    【讨论】:

    • 听起来不错,但不幸的是我从未使用过 VB(Python 是我第一次尝试编程 :))..
    • 为此,您需要自动化 excel,而 VBA 是最简单的方法。
    • 除了Excel还有其他方法。
    【解决方案4】:

    更改文件的名称(扩展名只是完整名称的一部分)绝对不会影响文件的内容。您需要以某种方式将内容从一种格式转换为另一种格式。

    使用my dbf module 和python 非常简单:

    import dbf
    
    IN = 'some_file.dbf'
    OUT = 'new_name.csv'
    
    dbf.Table(IN).export(filename=OUT)
    

    这将创建一个实际为 csv 格式的 .csv 文件。

    【讨论】:

      【解决方案5】:

      这取决于你想做什么。您似乎想将文件转换为其他类型。那里有许多转换器,但仅一台计算机并不知道每种文件类型。为此,您需要下载一些软件。如果您只想更改文件扩展名, (例如 .png、.doc、.wav)然后您可以将您的计算机设置为能够更改名称和扩展名。我希望我能以某种方式提供帮助:)

      【讨论】:

        【解决方案6】:

        descargar libreria 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
        

        【讨论】:

          猜你喜欢
          • 2016-05-09
          • 1970-01-01
          • 2018-11-19
          • 2021-02-04
          • 1970-01-01
          • 1970-01-01
          • 2012-08-05
          • 2014-05-23
          • 1970-01-01
          相关资源
          最近更新 更多