将 txt 转换为 xlsx,同时将数字单元格的单元格属性设置为数字

2023-12-13

相关问题:使用python将txt转换为xlsx时出错

我修改了以下代码,谢谢 Anand S Kumar。

import csv
import openpyxl

import sys


def convert(input_path, output_path):
    """
    Read a csv file (with no quoting), and save its contents in an excel file.
    """
    wb = openpyxl.Workbook()
    ws = wb.worksheets[0]

    with open(input_path) as f:
        reader = csv.reader(f, delimiter='\t', quoting=csv.QUOTE_NONE)
        for row_index, row in enumerate(reader, 1):
            for col_index, value in enumerate(row, 1):
                ws.cell(row=row_index, column=col_index).value = value

    wb.save(output_path)


def main():
    try:
        input_path, output_path = sys.argv[1:]
    except ValueError:
        print 'Usage: python %s input_path output_path' % (sys.argv[0],)
    else:
        convert(input_path, output_path)


if __name__ == '__main__':
    main()

这样做的一个问题是,这会以将纯数字单元格保存为普通文本的方式保存 xlsx。

因此,当我必须使用 MS-Excel 手动打开 xlsx 文件,然后单击“转换为数字”时。

如果单元格是纯数字,此代码是否可以以自动将单元格属性设置为数字的方式将 txt 转换为 xlsx?


我认为问题是当你使用读取数据时csv模块,您正在读取所有字符串。例子 -

a.csv好像 -

1,2,3
3,4,5
4,5,6

代码和结果 -

>>> import csv
>>> with open('a.csv','r') as f:
...     reader = csv.reader(f)
...     for row in reader:
...             print(row)
...
['1', '2', '3']
['3', '4', '5']
['4', '5', '6']

在您的特定代码中,您直接将 csv 模块返回的值设置为 openpyxl ,因此您得到的是字符串,而不是数字。

这里最好的解决方案是,如果您知道哪些列您希望数据成为整数,则可以在将其设置为 excel 之前检查代码以将这些数据转换为整数。例子 -

int_cols = set([2,4,5]) #This should be the list of all columns , 1 indexed, that contain integers.
with open(input_path) as f:
    reader = csv.reader(f, delimiter='\t', quoting=csv.QUOTE_NONE)
    for row_index, row in enumerate(reader, 1):
        for col_index, value in enumerate(row, 1):
            if col_index in int_cols:
                 ws.cell(row=row_index, column=col_index).value = int(value)
            else:
                ws.cell(row=row_index, column=col_index).value = value

如果存在浮点数,您可以对它们使用类似的逻辑,定义一组浮点列,然后如果 col_index 是该列,则将值转换为float保存之前。


如果按线 -

如果单元格是纯数字,此代码是否可以以自动将单元格属性设置为数字的方式将 txt 转换为 xlsx?

您的意思是您想将其设置为所有单元格的编号digits(甚至不是小数),那么你可以使用如下方法 -

def int_or_str(x):
    try:
        return int(x)
    except ValueError:
        return x

然后在您的代码中,您可以将设置值的行更改为 -

ws.cell(row=row_index, column=col_index).value = int_or_str(value)

Use float()在上面的方法中,如果你还想转换浮点数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 txt 转换为 xlsx,同时将数字单元格的单元格属性设置为数字 的相关文章

随机推荐

  • Android 模拟器和嵌套虚拟化

    我有个问题 我使用 hyper v 虚拟机来隔离开发过程 我在虚拟机上使用Windows 10 但我无法在我的虚拟机上安装虚拟机管理程序 如何在没有 hyper v 的情况下调试 xamarin forms 应用程序 Thanks 快速回答
  • 取消转义 mvc 应用程序返回的转义不可编码字符串的简单方法

    我已经检查了其他类似的问题 他们要么建议使用 WebUtility HtmlDecode 要么逐个字符替换编码部分 或者假设一些已知的正则表达式模式等 他们不回答这个特定的查询 我有一个 C 控制台应用程序 它将一些数据发送到 MVC 应用
  • 如何从 lldb 调试器类型切换到 gdb 调试器类型?

    我已经找了很长一段时间试图找出如何从 lldb 切换到 gdb 但找不到任何关于如何在 Xcode 6 1 中在两者之间切换的信息 我正在尝试调试我的应用程序 如果我使用 gdb 而不是 lldb 我也许能够弄清楚它 但我不知道它是否会对我
  • Material UI - 将图标作为道具传递

    我正在尝试通过 prop 将material ui 图标插入到我的组件中 请让我知道我做错了什么 但是 我不确定如何在 JSX 中传递图标 这是我的无效尝试 这个片段是我尝试将图标作为道具传递给类别组件
  • 元素在拖动后变得随机不可调整大小

    选择并拖动多个元素后 其中一些元素不再可调整大小 调整大小图标从右上角消失 可调整大小的图标保留在旧位置 并且不会移动已移动的元素 要重现 请运行下面的代码 使用套索选择所有元素并拖动选定的元素 之后 调整大小图标将从随机元素中消失 并且这
  • java Playframework GlobalSettings 弃用 onStart

    我遇到了 Playframwork 已弃用的烦人问题GlobalSettings问题 我想把我的 conde 移到里面onStart按照建议的方式 但实际上我无法完成此操作 文档没有任何意义 而且我不知道如何解决这个问题 我花了几天又几天的
  • 如何获取未读 Gmail 邮件的数量(在 Android 上)

    请注意 有一种新方法可以做到这一点 我一直在尝试获取未读 Gmail 邮件的数量 但没有成功 我读了Gmail java and gmail4j从这个问题中取出的两个链接 Android 如何找出用户有多少未读电子邮件 但在阅读了所有这些内
  • 用于精细监控编辑器更改的 Eclipse 插件

    因此 我希望为 Eclipse 4 2 开发一个插件 用于监视用户对其文件所做的编辑 这是我的第一个 Eclipse 插件 为了做好准备 我浏览了 Eclipse 插件开发备忘单 HelloWorld 并花了很多时间在 help eclip
  • FileSystemWatcher 触发后 - 线程池还是专用线程?

    我即将实现原型 FileSystemWatcher 解决方案 我有一个目录来监视文件创建 以及吸收创建的文件并将其插入数据库的任务 粗略地说 这将涉及读取和处理 6 或 7 80 个字符的文本文件 这些文本文件以 150 毫秒的速率出现 每
  • ORM 和 ORDBMS 之间有什么区别?

    他们看起来和我很相似 我不明白其中的区别也许是 ORDBMS 的编程示例 ORM 只是编程语言中的对象与关系数据库中的关系之间的转换层 这是notRDBMS 这里没有什么可以管理数据库 只是一个转换 映射层 阅读tag info of or
  • python sqlalchemy 在元组数据结构中插入多行

    我一直在研究如何将包含 7 个元素 列 的约 500 个元组 行 的列表插入到数据库中 我阅读了 stackoverflow 以及其他论坛上的各种帖子 我发现了以下内容 它建议使用 executemany 方法 但我不太清楚如何使用 我是否
  • python setup.py build ctypes.CDLL:无法打开共享对象文件:没有这样的文件或目录

    我已经实现了一个名为 api c 的 ctypes 包装器 并且具有以下结构 lib api c foo py setup py 手动编译api c并调用ctypes CDLL path lib api so inside foo py工作
  • 活动模型禁止属性错误

    有人能够帮助我理解这个错误吗 我正在尝试按照构建网络应用程序教程在 Rails 中创建联系表单 我按照以下步骤生成了消息支架 然后我修改了我的路线 接下来它说将其放入消息控制器显示操作中 if message save flash noti
  • 如何使用android实现验证码

    任何人都可以提供一些在 android 中实现验证码的建议吗 有点无耻的自我推销 但我最近也有同样的问题 在梳理了 StackOverflow com 后 我意识到所有的解决方案都是基于 Remote API 的 这需要我的简单应用程序需要
  • 在 Rails 中将编辑值 contenteditable 字段从视图传递到控制器

    我正在使用 Rails 3 1 构建一个 Web 表单 其中包含一个可以编辑单元格的表格以及其他字段 我需要将编辑的单元格的文本保存在数据库中 我正在考虑使用 HTML5 属性 contenteditable 我可以使用单元格的innerH
  • 检测ListBox的滚动事件?

    当列表框开始滚动时是否会触发事件 我目前有以下代码 可以从列表框中无缝拖放
  • 所有转义字符是什么?

    我知道Java中的一些转义字符 例如 n Newline r Carriage return t Tab Backslash 某处有完整的列表吗 您可以找到完整列表here t此时在文本中插入制表符 b此时在文本中插入退格键 n此时在文本中
  • 使用 C 预处理器将 int 连接到字符串

    我正在尝试弄清楚如何连接 define d int 到 define d 字符串使用C预处理器 我的编译器是 CentOS 5 上的 GCC 4 1 该解决方案也适用于 MinGW 我想将版本号附加到字符串上 但让它工作的唯一方法是复制定义
  • 如何制作一个自动构建、链接和执行 .asm 文件的批处理文件?

    我在大学里使用 DosBox 模拟器 我们使用 MASM 构建 asm 文件 我非常厌倦每次都必须使用 masm 构建 asm 文件 然后按 Enter 键 4 次 然后输入 link obj 然后输入 4 次 然后运行实际的 exe 我想
  • 将 txt 转换为 xlsx,同时将数字单元格的单元格属性设置为数字

    相关问题 使用python将txt转换为xlsx时出错 我修改了以下代码 谢谢 Anand S Kumar import csv import openpyxl import sys def convert input path outpu