首页 > 解决方案 > 在 Python 中输出文件的内容

问题描述

我正在尝试做一些简单但有问题的事情。

我想读入一个文件并将每个单词导出到 Excel 电子表格中的不同列。我有电子表格部分,只是很难理解应该是简单的部分。

我所发生的是每个字符都放在一个新行上。

我有一个名为 server_list 的文件。该文件的内容如下所示。

Linux RHEL64 35
Linux RHEL78 24
Linux RHEL76 40

我想读取文件中的每一行并为每个单词分配一个变量,以便将其输出到电子表格。

File = open("server_list", "r")
FileContent = File.readline()

for Ser, Ver, Up value in FileContent:
    worksheet.write(row, col,     Ser)
    worksheet.write(row, col +1,     Ver)
    worksheet.write(row, col +1,     Up)
    row += 1

我收到此示例的以下错误

Traceback (most recent call last):
  File "excel.py", line 47, in <module>
    for Files, Ver, Uptime in FileContent:
ValueError: not enough values to unpack (expected 3, got 1)

标签: pythonfor-loopoutput

解决方案


FileContent是一个包含单行文件的字符串对象:

Out[4]: 'Linux RHEL64 35\n'

你想用这个字符串做的是strip结束标签\n,然后split变成单个单词。只有在这一点上,您才能执行当前导致您ValueErrorfor-statement 中的项目分配。在 python 中,这意味着:

ser, ver, up = line.strip().split()  # line is what you called FileContent, I'm allergic to caps in variable names

现在请注意,这只是我们正在谈论的一行。可能您想对文件中的所有行执行此操作,对吗?所以最好是遍历这些行:

myfile = "server_list"
with open(myfile, 'r') as fobj:
    for row, line in enumerate(fobj):
        ser, ver, up = line.strip().split()
        # do stuff with row, ser, ver, up

请注意,您不需要row自己跟踪,您可以使用enumerate迭代器来执行此操作。

另请注意,这很关键with我在这里使用的语句确保您不会打开文件。处理文件时使用with-clause 是一个好习惯!


推荐阅读