【问题标题】:Conversion text to number in python在python中将文本转换为数字
【发布时间】:2017-05-10 20:10:43
【问题描述】:

输入是一个文本表——一些列是数字和一些文本。我有 python 脚本将此文本文件转换为 xlsx。在 Excel 或 Libre 中打开后,所有字段都是文本。是否有任何选项可以将某些列转换为数字?

猫脚本.py:

import csv
import sys
from xlsxwriter.workbook import Workbook

# Add some command-line logic to read the file names.
tsv_file = sys.argv[1]
xlsx_file = sys.argv[2]

# Create an XlsxWriter workbook object and add a worksheet.
workbook = Workbook(xlsx_file)
worksheet = workbook.add_worksheet()

# Create a TSV file reader.
tsv_reader = csv.reader(open(tsv_file, 'rb'), delimiter='\t')

# Read the row data from the TSV file and write it to the XLSX file.
for row, data in enumerate(tsv_reader):
    worksheet.write_row(row, 0, data)

# Close the XLSX file.
workbook.close()

运行脚本:

python script.py in.txt out.xlsx

我想更改脚本以将某些列转换为文本,将某些列转换为数字并保持 xlsx 格式。知道该怎么做吗?

【问题讨论】:

    标签: python linux excel bash


    【解决方案1】:

    您可以使用strings_to_numbers XlsxWriter 构造函数选项。来自docs

    strings_to_numbers:启用worksheet.write() 方法以将字符串转换为数字,在可能的情况下,使用float() 以避免出现有关“数字存储为文本”的 Excel 警告。默认值为假。要启用此选项,请使用:

    workbook = xlsxwriter.Workbook(filename, {'strings_to_numbers': True})
    

    示例:

    import xlsxwriter
    
    workbook = xlsxwriter.Workbook('test.xlsx', {'strings_to_numbers': True})
    worksheet = workbook.add_worksheet()
    
    worksheet.write(0, 0, 'Hello')
    worksheet.write(1, 0, '123') # Write this string as a number.
    
    workbook.close()
    

    输出:

    【讨论】:

    • 您好,感谢您的评论。当我将此行添加到脚本并尝试运行时,出现错误: NameError: name 'xlsxwriter' is not defined 知道吗?
    • 我将 xlsxwriter.Workbook(.. 更改为 xlsxwriter.workbook(... 因为 python 区分大小写,但仍然有 sam 错误:NameError: name 'xlsxwriter' is not defined 异常异常:异常('工作簿析构函数中捕获的异常。工作簿可能需要显式关闭()。',)在 > 的
    • 语法正确。我是模块的作者。我添加了一个可以测试的工作示例。
    • 谢谢你的好例子。我是 python 的新手。我的输入文本文件有大约 50 列,我需要写成数字,例如只有 10 列。在我的示例中,我使用了 for 循环 - 可以展示如何使用 for 循环修改我的原始脚本的示例!再次感谢您的宝贵时间!
    • 在这种情况下,您可能应该遍历行 and 列,然后仅在 col < 10 时调用 .write()。但这可能值得在另一个问题中提出。
    【解决方案2】:

    根据文档,您需要添加一个数字格式,并在您编写需要数字格式的单元格时使用它。

    # Add a number format for cells with money.
    money = workbook.add_format({'num_format': '$#,##0'})
    
    ...
    
    worksheet.write(row_idx, col_idx, your_value, money)
    

    Tutorial 2: Adding formatting to the XLSX File

    【讨论】:

      猜你喜欢
      • 2020-09-24
      • 2019-10-07
      • 2012-12-27
      • 1970-01-01
      • 1970-01-01
      • 2020-12-16
      • 1970-01-01
      • 2023-03-15
      相关资源
      最近更新 更多