将文本文件合并为一个字符串

conceneate text files to one string

我有几个文本文件想合并成一个大字符串。文本文件与我的 jupyter notebook 文件位于同一文件夹中。我在网上找到了这个解决方案,但我无法正确理解它。它是这样的:

def read_files_into_string(filenames):
    strings = []
    for filename in filenames:
        with open(f'textfile_{filename}.txt') as f:
            strings.append(f.read())
    return '\n'.join(strings)

我知道我们先定义函数,然后再创建一个空字符串文件。在这之后我们打开我们的文本文件,比如说,textfile_1 到 textfile_10 作为 f(一个变量?),一个接一个地循环。

现在是我不明白的部分:我们是否先读取一个文件 (f.read) 并将其附加到字符串文件中?

不过最让我疑惑的是最后的return语句:换行表达式'\n'有什么用?我的文本文件以新行结尾 - 我们是否将单独的“字符串”与此字符粘合在一起?

我不能评论你的post,所以我写在这里。 我们定义一个空列表,然后我们将文件添加到列表中,文件以','分隔进入列表。 喜欢

 list_test = ['dsag','asdg','sdaga']

所以通过使用join函数,我们将所有的文本文件join起来,输出会join,每个文件单独换行;如果你愿意,你可以改变它。 例如,如果你想让它们粘在一起,你可以使用下面的命令。

 ''.join(list_test)  # 'dsagasdgsdaga'

我会尽量回答你的每一个问题:

  1. I understand that we define the function first, than we create an empty stringfile. After this we open our textfiles, say, textfile_1 to textfile_10 as f (a variable?), one after another with a loop.

是的,f 是引用文件的变量。 关于上下文管理器的工作原理。

  1. Now to the part I don't get: Do we read the files (f.read) one after antoher and append it to the string file?

确切地说,您正在遍历文件。对于每个文件,您将其内容 (f.read()) 作为 str 读取,并将该字符串包含在 strings 列表中。

  1. But the part that puzle me the most is the return statement in the end: What's the use of the new line expression '\n'? My text files end with new lines - are we gluing the seperate "strings" together with this character?

该行代码只是获取列表中的每个字符串,并使用 "\n" 字符串(Python docs on str.join(iterable)). "\n" is a newline character, meaning that this characters means "skip to the next line". Checkout this question 及其答案。

将它们连接起来

在此代码中,filenames 是文件名列表,strings 是文件内容数组(因此不是最好的命名方式)。

当您遍历 filenames 时,您从 filenames 列表中选择每个 filename 并使用

打开一个名为 textfile_<filename>.txt 的文件
with open(..) as f:

那个构造叫做(synchronous) context manager。使用它的要点是当异常发生时文件将被安全关闭。因此,您正在遍历文件,每次将文件内容添加到 strings 列表

最后一件事是'<delimeter>'.join(iterable_str: typing.Iterable[str])

join iterable of strings (e.g. list of strings) with <delimeter>, so it will return 1 string

所以

print('\n'.join(strings))

从字符串中获取所有字符串并在它们之间用'\n'连接它们,然后打印结果字符串

可以这样表示

print(strings[0] + '\n' + strings[1] + '\n' + ... + '\n' + strings(len(strings) - 1))