导出数据:
num = 0
exportData = open("results_file.txt", "a")
while num < len(runs) - 1:
exportData.write(str(runs[num]) + "\n")
num = num + 1
exportData.close()
将数据导入新文件:
runs = []
num = 1
count = len(open("results_file.txt").readlines( ))
print(count)
importData = open("results_file.txt", "r")
while num < count:
runs.append(importData.read(num))
print(importData.read(num))
num = num + 1
importData.close()
我的目标是将整数数组导出到一个文件(可以是除我关心的txt文件之外的其他文件),然后稍后将它们导入到一个新文件中并将它们用作整数(执行对它们进行数学运算)
我收到的错误(在第 28 行,我尝试使用数组中的第一个数字进行数学计算): 第 28 行,在 if running[num] < 7: TypeError: 'str' 和 'int' 实例之间不支持 '<'
runs = []
num = 1
count = len(open("results_file.txt").readlines( ))
print(count)
importData = open("results_file.txt", "r")
while num < count:
runs.append(int(importData.read(num)))
print(importData.read(num))
num = num + 1
importData.close()
添加 int() 会返回此错误: ValueError:以 10 为基数的 int() 的文字无效:'4\n1'
最佳答案
你并不是Pythonic,这里的许多答案也不是。那么,让我稍微清理一下您的代码。
from ast import literal_eval
with open("results_file.txt", "a") as exportData:
for run in runs:
exportData.write(str(run) + "\n")
runs = []
with open("results_file.txt", "r") as importData:
runs.extend([literal_eval(x) for x in importData])
我将逐行分解:
from ast importliteral_eval
是将字符串解析为 python 对象的最安全方法。它比使用普通的旧 eval
更好,因为它不会运行任意代码。稍后我们将使用此函数来读取数据。
with open(...) as ...
是打开文件的最佳方式。它包含单个范围内的文件对象并捕获错误。在这里查看这个:Pep 343
for ... in ...
您使用的 For 循环根本不是 pythonoic。 Pythonic 方法是使用迭代器,无需计算行数并声明变量来跟踪...Python 对象跟踪自身。 (如果您需要计数器,我强烈建议您查找 enumerate()
Enumerate() in Python
exportData.write(str(run) + "\n")
这里唯一的变化是,使用 pythonic for
循环,不需要索引 不再运行
列表。
runs = []
我想你知道这是什么,但我必须在 with
语句中声明它,因为如果 with
> 语句抛出一个错误,您要捕获它,runs
将被初始化。
我已经讨论过 with
语句。
runs.extend([literal_eval(x) for x in importData])
有两件事发生。 extend
将一个列表附加到一个列表...酷。这里更有趣的部分是列表理解。 Here's a tutorial on list comprehensions 。一旦您熟悉了 for 循环,列表理解就是下一个 Python 步骤。为了进一步了解 Python 风格,这一行也可以替换为: runs.extend(map(literal_eval, importData))
就是这样,9 行。快乐的黑客攻击。
关于python - 如何将 int 导出到 "txt"文件,然后在以后能够将它们作为 int 导入回来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58190408/