.txt文件

时间:2016-09-15 09:57:05

标签: python

我正在尝试使用我从书中学到的基本功能(Mark Summerfield)在Python中创建原始字典(或列表)。

这是我的问题。

一切都按照我的需要工作,但我在将字符串写入文件时遇到了问题。

这是我的一段代码:

  word = input("New word is: ") #adding new word
  if word:
       word.strip() #erasing new str from any symbols
       x = len(word)
       numeration = str(count) + ". " 
       word = word[:0] + numeration + word[0:] # =to sort as list
       word = word[:x] + ",\n" # =adding shift to the end of str
       file = open("test.txt", "a") # =wriing to the file 
       file.write(word)
       file.close()
       count += 1

问题在输出中显示:

======================== RESTART: /home/z177/test.py ========================
Type word to add word, type nothing to read dict, ^D\Z to quit
New word is: currently raining
New word is: currently not
New word is: 
1. currently rain,
2. currently ,

它覆盖了字符串中的最后3个符号。

我通过替换

解决了这个问题
word[:x] + ",\n" 

word + ",\n"

当我在字符串的末尾添加新符号时,我仍然感兴趣为什么代码正在替换这3个符号。

你能解释一下吗?

3 个答案:

答案 0 :(得分:1)

问题是在这一行中创建的:

word = word[:x] + ",\n" # =adding shift to the end of str

您需要记住变量word不再包含您的单词。你那里有例如“0. word”。

因此,您必须更新x - 行计数才能在文件中获得正确的结果。

答案 1 :(得分:1)

插入numeration后,单词的长度增加,因此x保存更新前旧长度的值。您应该在更新后移动分配x的行:

numeration = str(count) + ". " 
word = numeration + word[0:] # length of word changes here
x = len(word)
word = word[:x] + ",\n"

或坚持使用word = word + ",\n",它不那么冗长,但仍然做同样的事情。

然而,整个逻辑可简化为以下内容:

word = numeration + word + ',\n'  

答案 2 :(得分:1)

您的问题是您将x设置为输入字的长度,但随后将numeration添加到字符串中,使其更长几个字符(如果是单个字符,则为三个字符) -digit count)。如果你要改变

word = word[:x] + ",\n" # =adding shift to the end of str

word = word[:len(word)] + ",\n"

你应该得到正确的结果。

与您的问题无关,您提供的代码非常不具有Pythonic,当您掌握了该程序的逻辑时,我会使用with open('test.txt', 'a') as file:来查看重构。显式file.close()并使用str.format()进行连接。