将文本文件合并为一个字符串
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'
我会尽量回答你的每一个问题:
- 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
是引用文件的变量。 关于上下文管理器的工作原理。
- 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
列表中。
- 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))
我有几个文本文件想合并成一个大字符串。文本文件与我的 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'
我会尽量回答你的每一个问题:
- 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
是引用文件的变量。
- 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
列表中。
- 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))