输入数据文件.txt并使用Python将特定数据输出到新的.txt文件

时间:2012-02-28 17:23:07

标签: python

我想输入或读取.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

3 个答案:

答案 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