如何将任意长度的文本文件读取到python中单独的字符串和整数变量?
How to read a text file that can be any length into separate string and integer variables in python?
有一个data.txt格式的文本文件(文本文件的长度可以是任意长度):
Start 111 139
A 122 155
B 133 217
C 144 223
Finish
每个值之间的分隔符是制表符 (\t),行以回车符 (\n) 结束。我想将每个值放入一个具有正确类型的单独变量中(数字为 int,文本为字符串)。文本文件的长度可以是任意长度(D、E、F……可以有不同数字的行)。在最后一行总是有一个词:“完成”。对于上面的示例,我想总共获得 5 个字符串变量和 8 个 int 变量。理想的输出如下:
str1 = str('Start')
int1 = int(111)
int2 = int(139)
str2 = str('A')
int3 = int(122)
int4 = int(155)
str3 = str('B')
int5 = int(133)
int6 = int(217)
str4 = str('C')
int7 = int(144)
int8 = int(223)
str5 = str('Finish')
变量的名称可以是任何东西,如果您的方法已经定义了变量的类型,则不需要强制转换。
对于部分阅读,我试过这个:
with open('data.txt') as file:
lines = [line.rstrip().split('\t') for line in file]
print(lines)
但它给了我三个列表,但是,我想动态地为每个值创建单独的变量。预先感谢您的帮助!
你的例子没有任何意义。但是,如果这就是您要找的:
def conv(s):
try:
return ('int', int(s))
except ValueError:
return ('str', f"'{s}'")
cnt={}
with open('/tmp/file') as f:
for line in f:
for s in line.split():
t=conv(s)
cnt[t[0]]=cnt.get(t[0], 0)+1
print(f'{t[0]}{cnt[t[0]]} = {t[0]}({t[1]})')
打印:
str1 = str('Start')
int1 = int(111)
int2 = int(139)
str2 = str('A')
int3 = int(122)
int4 = int(155)
str3 = str('B')
int5 = int(133)
int6 = int(217)
str4 = str('C')
int7 = int(144)
int8 = int(223)
str5 = str('Finish')
不要尝试从这些变量中获取变量!相反,使用 dict
像这样:
def conv(s):
try:
return ('int', int(s))
except ValueError:
return ('str', f"'{s}'")
cnt={}
data={}
with open('/tmp/file') as f:
for line in f:
for s in line.split():
t=conv(s)
cnt[t[0]]=cnt.get(t[0], 0)+1
data[f'{t[0]}{cnt[t[0]]}'] = t[1]
>>> data
{'str1': "'Start'", 'int1': 111, 'int2': 139, 'str2': "'A'", 'int3': 122, 'int4': 155, 'str3': "'B'", 'int5': 133, 'int6': 217, 'str4': "'C'", 'int7': 144, 'int8': 223, 'str5': "'Finish'"}
有一个data.txt格式的文本文件(文本文件的长度可以是任意长度):
Start 111 139
A 122 155
B 133 217
C 144 223
Finish
每个值之间的分隔符是制表符 (\t),行以回车符 (\n) 结束。我想将每个值放入一个具有正确类型的单独变量中(数字为 int,文本为字符串)。文本文件的长度可以是任意长度(D、E、F……可以有不同数字的行)。在最后一行总是有一个词:“完成”。对于上面的示例,我想总共获得 5 个字符串变量和 8 个 int 变量。理想的输出如下:
str1 = str('Start')
int1 = int(111)
int2 = int(139)
str2 = str('A')
int3 = int(122)
int4 = int(155)
str3 = str('B')
int5 = int(133)
int6 = int(217)
str4 = str('C')
int7 = int(144)
int8 = int(223)
str5 = str('Finish')
变量的名称可以是任何东西,如果您的方法已经定义了变量的类型,则不需要强制转换。
对于部分阅读,我试过这个:
with open('data.txt') as file:
lines = [line.rstrip().split('\t') for line in file]
print(lines)
但它给了我三个列表,但是,我想动态地为每个值创建单独的变量。预先感谢您的帮助!
你的例子没有任何意义。但是,如果这就是您要找的:
def conv(s):
try:
return ('int', int(s))
except ValueError:
return ('str', f"'{s}'")
cnt={}
with open('/tmp/file') as f:
for line in f:
for s in line.split():
t=conv(s)
cnt[t[0]]=cnt.get(t[0], 0)+1
print(f'{t[0]}{cnt[t[0]]} = {t[0]}({t[1]})')
打印:
str1 = str('Start')
int1 = int(111)
int2 = int(139)
str2 = str('A')
int3 = int(122)
int4 = int(155)
str3 = str('B')
int5 = int(133)
int6 = int(217)
str4 = str('C')
int7 = int(144)
int8 = int(223)
str5 = str('Finish')
不要尝试从这些变量中获取变量!相反,使用 dict
像这样:
def conv(s):
try:
return ('int', int(s))
except ValueError:
return ('str', f"'{s}'")
cnt={}
data={}
with open('/tmp/file') as f:
for line in f:
for s in line.split():
t=conv(s)
cnt[t[0]]=cnt.get(t[0], 0)+1
data[f'{t[0]}{cnt[t[0]]}'] = t[1]
>>> data
{'str1': "'Start'", 'int1': 111, 'int2': 139, 'str2': "'A'", 'int3': 122, 'int4': 155, 'str3': "'B'", 'int5': 133, 'int6': 217, 'str4': "'C'", 'int7': 144, 'int8': 223, 'str5': "'Finish'"}