在 Python 中拆分字符串时出现问题
Problems splitting a string in Python
我正在尝试从文件中读取一些值,但在尝试拆分它们时总是出现错误;
文本文件如下所示:
2009-10 0:12:01
2009-12 0:06:24
2010-06 0:29:24
2012-06 0:10:29
这是我的代码;
myFiles = glob.glob('./*.txt')
for fileName in myFiles:
fileHandle = open(fileName,'r')
print str(fileName)
for date, value in str(fileHandle.readline()).split(' ',1):
print "date: " + str(date)
print "value: " + str(value)
我要输出的内容:
<filename>
date: 2009-10
value: 0:12:01
date: 2009-12
value: 0:06:24
date: 2010-06
value: 0:29:24
date: 2012-06
value: 0:10:29
<filename>
etc
etc...
我遇到的错误:
Traceback (most recent call last):
File "./scratch.py", line 16, in <module>
for date, value in str(fileHandle.readlines()).split(' ',1):
ValueError: too many values to unpack
您没有正确迭代文件中的行:
for date, value in str(fileHandle.readline()).split(' ',1):
这仅遍历第一行中的两个字段:['2009-12', '0:06:24\n']
。每个字段都是一个字符串,因此无法解压缩为 date, value
。为什么不试试更直接的:
import glob
myFiles = ['input.txt']
for fileName in myFiles:
fileHandle = open(fileName,'r')
print str(fileName)
for line in fileHandle:
date, value = line.split()
print "date: " + str(date)
print "value: " + str(value)
input.txt
date: 2009-10
value: 0:12:01
date: 2009-12
value: 0:06:24
date: 2010-06
value: 0:29:24
date: 2012-06
value: 0:10:29
当线被分割一次时,它给出了一个列表。当你迭代列表时,就像你所做的那样,使用 for
,它期望它是一个可迭代的项目,每个项目都可以通过两个变量解包。
你的for
语句等同于阅读第一行后
for date, value in ['2009-10', '0:12:01']:
...
这就是它因该错误而失败的原因。
更好的方法是,
import glob
# Iterate the found files
for fileName in glob.glob('./*.txt'):
# Open the file with `with` statement
with open(fileName, "r") as fileHandle:
print str(fileName)
# Give date and value from each line, with generator expression
for date, value in (line.strip().split(' ',1) for line in fileHandle):
# Print with the template string
print "date: {}\nvalue: {}".format(date, value)
解决问题的更简单方法
with open ("path to file\test.txt","r") as f:
for line in f:
date, value = line.split()
print "date: {}".format(date)
print "value: {}".format(value)
输出:
date: 2009-10
value: 0:12:01
date: 2009-12
value: 0:06:24
date: 2010-06
value: 0:29:24
date: 2012-06
value: 0:10:29
据我所知,您不能在迭代线上时拆分。你可以做的是读取每一行,然后拆分这一行并得到结果:
myFiles = glob.glob('./*.txt')
for fileName in myFiles:
fileHandle = open(fileName,'r')
print str(fileName)
for line in fileHandle.readlines():
print "date: " + str(line.split(' ')[0])
print "value: " + str(line.split(' ')[1])
我正在尝试从文件中读取一些值,但在尝试拆分它们时总是出现错误;
文本文件如下所示:
2009-10 0:12:01
2009-12 0:06:24
2010-06 0:29:24
2012-06 0:10:29
这是我的代码;
myFiles = glob.glob('./*.txt')
for fileName in myFiles:
fileHandle = open(fileName,'r')
print str(fileName)
for date, value in str(fileHandle.readline()).split(' ',1):
print "date: " + str(date)
print "value: " + str(value)
我要输出的内容:
<filename>
date: 2009-10
value: 0:12:01
date: 2009-12
value: 0:06:24
date: 2010-06
value: 0:29:24
date: 2012-06
value: 0:10:29
<filename>
etc
etc...
我遇到的错误:
Traceback (most recent call last):
File "./scratch.py", line 16, in <module>
for date, value in str(fileHandle.readlines()).split(' ',1):
ValueError: too many values to unpack
您没有正确迭代文件中的行:
for date, value in str(fileHandle.readline()).split(' ',1):
这仅遍历第一行中的两个字段:['2009-12', '0:06:24\n']
。每个字段都是一个字符串,因此无法解压缩为 date, value
。为什么不试试更直接的:
import glob
myFiles = ['input.txt']
for fileName in myFiles:
fileHandle = open(fileName,'r')
print str(fileName)
for line in fileHandle:
date, value = line.split()
print "date: " + str(date)
print "value: " + str(value)
input.txt
date: 2009-10
value: 0:12:01
date: 2009-12
value: 0:06:24
date: 2010-06
value: 0:29:24
date: 2012-06
value: 0:10:29
当线被分割一次时,它给出了一个列表。当你迭代列表时,就像你所做的那样,使用 for
,它期望它是一个可迭代的项目,每个项目都可以通过两个变量解包。
你的for
语句等同于阅读第一行后
for date, value in ['2009-10', '0:12:01']:
...
这就是它因该错误而失败的原因。
更好的方法是,
import glob
# Iterate the found files
for fileName in glob.glob('./*.txt'):
# Open the file with `with` statement
with open(fileName, "r") as fileHandle:
print str(fileName)
# Give date and value from each line, with generator expression
for date, value in (line.strip().split(' ',1) for line in fileHandle):
# Print with the template string
print "date: {}\nvalue: {}".format(date, value)
解决问题的更简单方法
with open ("path to file\test.txt","r") as f:
for line in f:
date, value = line.split()
print "date: {}".format(date)
print "value: {}".format(value)
输出:
date: 2009-10
value: 0:12:01
date: 2009-12
value: 0:06:24
date: 2010-06
value: 0:29:24
date: 2012-06
value: 0:10:29
据我所知,您不能在迭代线上时拆分。你可以做的是读取每一行,然后拆分这一行并得到结果:
myFiles = glob.glob('./*.txt')
for fileName in myFiles:
fileHandle = open(fileName,'r')
print str(fileName)
for line in fileHandle.readlines():
print "date: " + str(line.split(' ')[0])
print "value: " + str(line.split(' ')[1])