我想输入或读取.txt文件的以下数据:
VIBRATION/SHOCK CALIBRATION DATA
DATE: 2/26/2012
TIME: 0800
Time (ms) Channel 1 Channel 2 Channel 3
0.0 -0.9 9.0 12.9
50.0 5.0 12 343
100.0 56.7 120 0.8
150.0 90.0 0.9 12.0
200.0 32.9 12.4 34.0
然后输出到新的.txt文件,以便只为时间和通道3列写入数字:
0.0 12.9
50.0 343
100.0 0.8
150.0 12.0
200.0 34.0
答案 0 :(得分:3)
作为一个完整的例子,考虑类似下面的代码。我添加了过多的注释来解释每个步骤的作用。
# Open the input file read-only...
with open('infile.txt', 'r') as infile:
# Skip the first 4 lines, and store them as "header" in case we need them...
# It's important that we use "next" here and _not_ infile.readline().
# readline and the file iteration methods ("for line in file") can't be mixed
header = [next(infile) for dummy in range(4)]
# Open the output file, overwriting whatever is there...
with open('outfile.txt', 'w') as outfile:
# Loop over the lines in the input file
for line in infile:
# Strip off leading and trailing whitespace (e.g "\n") and
# split on whitespace. This gives us a list of strings.
columns = line.strip().split()
# Write the 1st and 4th columns in each row as left-justified
# columns with a fixed-width of 8
outfile.write('{:8}{:8}\n'.format(columns[0], columns[3]))
如果您使用旧版本的python并希望避免使用with
语句,可以这样写:
# Open the input file read-only...
infile = open('infile.txt', 'r')
# Open the output file, overwriting whatever is there...
outfile = open('outfile.txt', 'w')
# Skip the first 4 lines, and store them as "header" in case we need them...
# It's important that we use "next" here and _not_ infile.readline().
# readline and the file iteration methods ("for line in file") can't be mixed
header = [next(infile) for dummy in range(4)]
# Loop over the lines in the input file
for line in infile:
# Strip off leading and trailing whitespace (e.g "\n") and
# split on whitespace. This gives us a list of strings.
columns = line.strip().split()
# Write the 1st and 4th columns in each row as left-justified
# columns with a fixed-width of 8
outfile.write('{:8}{:8}\n'.format(columns[0], columns[3]))
# Close the file objects once we're through with them..
# Python would close these automatically when the process ends, but it's a good
# idea to get in the habit of explicitly closing them once you don't need them.
# Otherwise, when you start writing code for longer-running processes, you'll
# inadvertently leave lots of file handles laying around
infile.close()
outfile.close()
但是,养成使用with
语句来处理文件对象的习惯是个好主意。它们确保即使代码中存在错误,文件句柄也会自动关闭。 with
语句是“上下文管理器”。对于许多本来需要“样板”清理和/或输入代码的东西,它们非常方便。
答案 1 :(得分:0)
您可以在行字符串上调用split()来获取列:
t, ch1, ch2, ch3 = line.split()
返回的值将是字符串。如果你想要数字,使用float()来转换它们:
t_f = float(t)
ch3_f = float(ch3)
答案 2 :(得分:0)
我不是真正的python家伙,但建立在上面的评论上,一旦你读了数据,你应该能够在每一行使用str.split()
来获取列中的值线。
此处的文档:http://docs.python.org/release/3.1.3/library/stdtypes.html#string-methods