我有一个 CSV 文件,其中包含一些单词,后跟一个数字,需要一种附加数字的方法;要么给它加 1,要么把它设置回 1。比如说我有这些词:
variant,1
sixty,2
game,3
library,1
如果用户输入数字 60,我如何使用它在数字上加一,我如何将其重置回 1?
我一直在用 Google+Stackoverflow 寻找答案,但我希望我找不到答案更多是因为我缺乏经验。谢谢。
在不知道何时要将数字切换为 1 以及何时要加 1 的情况下,我无法给出完整的答案,但我可以让你走上正轨。首先,您要导入 csv 文件,以便对其进行更改。csv 模块在这方面非常有帮助。在这里阅读:http: //docs.python.org/2/library/csv.html
您可能希望将其读入字典结构,因为这会将每个单词链接到它对应的数字。像这样的东西从 csv 文件列中制作字典
然后,您将需要使用 raw_input(如果您使用的是 Python 3.0,则使用 input)来获取您要查找的单词并将其用作查找和更改要更改的数字的键。http://anh.cs.luc.edu/python/hands-on/handsonHtml/handson.html#x1-490001.12 或http://www.sthurlow.com/python/lesson06/ 将向您展示如何获得一份字典的另一部分以及如何将信息保存回字典。
对不起,这不是一个直接的答案。也许其他人会写一个,但它应该让你开始,
这是使用文件输入的快速组合。由于我不知道您为什么会减少或重置您的值的条件,我将其添加为您可以随意传递的关键字 arg。如
updateFileName(filename, "sixty", reset=True)
updateFileName(filename, "sixty", decrease=True)
updateFileName(filename, "sixty")
每个结果都应该是不言自明的。祝你好运!我将它包装在一个 Try 中,因为我不知道你的结构是怎样的,这将导致它最终以任何方式失败。如果您有空格,则需要 .strip() 键和值。
import fileinput
def updateFileName(filename, input_value, decrease=False, reset=False):
try:
for line in fileinput.input(filename, inplace=True):
key, value = line.split(",")
if key == input_value:
if decrease:
sys.stdout.write("%s,%s"(key, int(value) - 1)
elif reset:
sys.stdout.write("%s,%s"(key, 1)
else:
sys.stdout.write("%s,%s"(key, int(value) + 1)
continue
sys.stdout.write(line)
finally:
fileinput.close()
这很可能不是最好的方法,但您可以在loadtxt()的帮助下使用 numpy 将 csv 文件加载到数组对象中。以下代码将为您提供一个二维数组,第一列中包含名称,第二列中包含您的数字。
import numpy as np
a = np.loadtxt('YourFile',delimiter=',')
以您想要的方式对数字执行更改,并使用 numpy savetxt()保存文件。如果你的文件非常大,这个解决方案会很痛苦,因为加载一个巨大的数组会占用大量内存。因此,将其视为一种解决方法。字典解决方案实际上更好(我认为)。