Python 如何在不删除文件的情况下向文件中添加短语

Python 如何在不删除文件的情况下向文件中添加短语,python,Python,文本文件,它是一个“txt”文件。另外,对于不同长度的短语,我有单独的文件(空格计入短语长度),我看到了短语,因为它可以是多个单词,但在下面的示例中,我使用了三个字母的单词,它们都是一个单词。另外,想象每个短语都在一个新行上。每个短语用逗号分隔。假设您有这样一个文件: app, bar, car, eel, get, pod, ' app, bar, bat, car, eel, get, hat, mom, pod, rat ' 我想要的是能够添加一个或多个短语,假设这些短语只包含小写字母

文本文件,它是一个“txt”文件。另外,对于不同长度的短语,我有单独的文件(空格计入短语长度),我看到了短语,因为它可以是多个单词,但在下面的示例中,我使用了三个字母的单词,它们都是一个单词。另外,想象每个短语都在一个新行上。每个短语用逗号分隔。假设您有这样一个文件:

app,
bar,
car,
eel,
get,
pod,
'
app,
bar,
bat,
car,
eel,
get,
hat,
mom,
pod,
rat
'
我想要的是能够添加一个或多个短语,假设这些短语只包含小写字母和/或空格

例如,假设我想按以下顺序添加短语:

(猫、蝙蝠、汽车、帽子、妈妈、老鼠)

基本上,我想在不删除的情况下将这些短语添加到文件中 打开文件,确保文件中没有重复的短语,并确保它们按字母顺序排序。根据字母顺序,空格假定位于字母z之后。因此,输入这些短语后,文件应如下所示:

app,
bar,
car,
eel,
get,
pod,
'
app,
bar,
bat,
car,
eel,
get,
hat,
mom,
pod,
rat
'
每个文件都被假定为至少有1 GB的数据。什么是最快的/消耗内存最少的/等等。因此,复制文件以实现这一点是不可能的

我没有尝试过100%有效的东西。我知道该怎么做,只是不知道怎么做。以下是我需要完成的要点

1) 确保已创建短语(使用input()函数)

2) 打开有组织单词的文件(使用“with Open(filename)”语句)

3) 将每个短语放入文件中的“正确”位置。我所说的“正确”是指按字母顺序排列,而不是重复

4) 确保文件没有被删除

以下是我目前所做的(做了一点修改,做了更多我想做的事情,但不是全部):

因此,我开始时两个文件都是空的,我将单词“cow”添加到输入中,文件看起来是这样的:

三个字符的短语.txt:

cow
然后我输入单词“bat”,我得到了这个:

bat
cow
bawk
bat
cow
然后我添加了单词“bawk”(我知道它不是一个三个字母的单词,但我会注意确保正确的单词进入正确的文件)

我明白了:

bat
cow
bawk
bat
cow

看起来您正在专注于实现,而不是试图理解概念,所以让我邀请您与我一起退一步

您有一个类似于列表的数据结构(因为顺序是相关的),但不允许重复

['act'、'bar'、'dog']
您想向该列表添加一个条目

['act'、'bar'、'cat'、'dog']
然后将整个过程序列化到文件中,以便在多个会话之间使用相同的数据

首先是建立序列化方法。您选择了一个以行分隔的纯文本文件。这并没有错,但若您正在寻找替代方案,那个么csv、json或直接序列化到数据库也可能不错。不过,假设您不会更改序列化模式,那么让我们继续前进

它很容易从文件中读取

从pathlib导入路径
FILEPATH=Path(“/Users/ian/Documents/three\u character\u phrases.txt”)
def read_短语():
将FILEPATH.open(mode='r')作为f:
返回[f中的行的line.strip()]
而且也很容易给它写信

#假设文件路径在这里定义,并且在将来的所有代码片段中也定义。
def书写短语(短语):
将FILEPATH.open(mode='w')作为f:
f、 writelines(f'{phrase}\n'表示短语中的短语)
#这相当于:
#text='\n'.连接(短语)
#f.write(文本+“\n”)
您甚至已经知道了如何让用户输入新值(尽管您的算法可以使用work改进最坏情况。因为您总是插入到排序列表中,
bisect
stdlib模块可以帮助您在大型列表中提高性能。不过,我将把它留给另一个问题)

既然你已经成功地完成了所有的单一步骤,唯一让你却步的就是把它们放在一起

短语=阅读短语() 短语_to_add=input('请输入短语:')。lower() 如果短语_to_不在短语中添加: 短语。附加(短语添加到短语) 短语.sort()#这同样不是最优的。看对分! 写短语(短语)
但是我如何确保没有重复,并且不只是将其追加到文件末尾。添加dsta而不删除意味着追加,这可以通过在“a”模式下相应地打开文件来完成。但是,您需要将新数据插入文件中已有的DAT中,因此需要重写整个文件或创建新文件。首先,从文件中检索数据并将其放入列表中。然后将“input()”中的项目添加到列表中。然后检查重复项并对其排序,然后使用for循环写入文件。但是如何以追加模式将其写入文件,而不必为每个实例写入:filename.write(短语)?哦,我知道你说使用for循环,但我如何正确使用它,因为每次都是这样,除非我得到意外的结果。假设,我有一个没有重复的列表,我如何使用for循环在append模式下写入文件,每个短语在新行上?如果您确定文件中已经存在的数据已经正确排序,您甚至可以通过简单地迭代旧文件来动态写入新文件,没有把它完全读入记忆。谢谢你亚当·斯密!天啊!我会投票给你1000次,因为老实说,这已经困扰我太久了,甚至不再有趣了。再次感谢你!还有,我该如何投票?我该如何实施对分法?伊恩人倾向于花大量时间彻底回答问题。如果一个解决方案回答了您的问题,请检查它,如果它不能解决问题,请留下评论。@Ian自己在一个小玩具应用程序上试试。A.