将文本按列写入文件

0 投票
4 回答
4684 浏览
提问于 2025-04-18 14:46

作为一名律师,我在编程方面完全是个新手。不过我很热情,学到了很多东西,比如什么是变量等等。

我经常使用 dir() 这个函数,并查看它的结果。如果能把输出显示成一列或多列,那就更好了。所以我想写我的第一个程序,比如把 dir(sys) 的结果写到一个输出文件中,并且以列的形式展示。

到目前为止,我写了这个:

textfile = open('output.txt','w')
syslist = dir(sys)

for x in syslist:
    print(x)

在屏幕上显示的结果正是我想要的,但是当我使用 .write 时,比如:

textfile = open('output.txt','w')
syslist = dir(sys)

for x in syslist:
    textfile.write(x)

textfile.close()

文本就变成了一行行的。

有没有人可以帮我一下,怎么把 dir(sys) 的输出写到文件中,并且以列的形式展示呢?

如果可以的话,请用最简单的方法来写,因为我几乎每个单词都要在文档里查找。非常感谢!

4 个回答

0

我对你的问题有点困惑,但我觉得答案其实很简单,就是加上制表符。你只需要把 textfile.write(x) 改成 textfile.write(x + "\t"),这样就可以了,对吧?你可以根据数据的大小来调整制表符的数量。

我正在修改我的回答。

需要注意的是,使用 dir(sys) 会给你一个字符串数组。这些字符串没有任何格式。print x 这个命令默认会添加一个换行符,所以你看到的每个字符串都在自己的一行上。但是,write 命令就不会这样做。因此,当你使用 write 时,需要自己添加必要的格式。如果你想让输出看起来和 print 一样,你需要加上 write(x + "\n"),这样才能得到 print 自动添加的换行符。

2

其他的回答看起来都没错,他们猜测你是想添加一些 .write 方法没有提供的换行符。不过因为你刚开始接触编程,我想给你提一些在 Python 中的好习惯,这样会让你的编程生活更轻松:

with open('output.txt', 'w') as textfile:
  for x in dir(sys):
    textfile.write('{f}\n'.format(f=x))

这里的 'with' 是用 'open' 来作为一个上下文管理器。它会自动关闭你打开的文件,而且你一眼就能看到文件在哪里被打开。只在这个上下文管理器里保留那些需要的东西。此外,使用 .format 方法也是很推荐的。

2

print 默认会在输出的字符串后面加一个换行符,而 file.write 则不会。你可以这样做:

for x in syslist: textfile.write("%s\n" % x)

...在你添加内容的时候加上换行符。或者:

for x in syslist: textfile.write("%s\t" % x)

...在内容之间加上制表符。

希望这样对你来说是清楚的 "prima facie" ;)

1

欢迎来到Python的世界!

下面的代码会生成一个用制表符分隔的三列列表,但它不会自动对齐输出的内容。这个代码没有经过完全优化,所以应该更容易理解,我在添加的部分加了注释。

textfile = open('output.txt','w')
syslist = dir(sys)

MAX_COLUMNS = 3 # Maximum number of columns to print
colcount = 0    # Track the column number

for x in syslist:
    # First thing we do is add one to the column count when
    # starting the loop. Since we're doing some math on it below
    # we want to make sure we don't divide by zero.
    colcount += 1

    textfile.write(x)

    # After each entry, add a tab character ("\t")
    textfile.write("\t")

    # Now, check the column count against the MAX_COLUMNS. We
    # use a modulus operator (%) to get the remainder after dividing;
    # any number divisible by 3 in our example will return '0'
    # via modulus.
    if colcount % MAX_COLUMNS == 0:
        # Now write out a new-line ("\n") to move to the next line.
        textfile.write("\n")

textfile.close()

希望这对你有帮助!

撰写回答