需要从文本文件到电子表格进行分析

2024-09-30 20:16:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在处理从文本文件中获取的数据,这些数据必须随后进行分析。我当前正在使用Excel执行此任务。原始文件如下所示:

Contact Angle (deg)     86.20
Wetting Tension (dy/cm)     4.836
Wetting Tension Left (dy/cm)    39.44
Wetting Tension Right (dy/cm)   39.44
Base Tilt Angle (deg)       0.00
Base (mm)           1.6858
Base Area (mm2)         2.2322
Height (mm)         0.7888
Tip Width (mm)          0.9707
Wetted Tip Width (mm)       0.9581
Sessile Volume (ul)     1.1374
Sessile Surface Area (mm2)  4.1869
Contrast (cts)          245
Sharpness (cts)         161
Black Peak (cts)        10
White Peak (cts)        255
Edge Threshold (cts)        111
Base Left X (mm)        4.138
Base Right X (mm)       5.821
Base Y (mm)         2.980
RMS Fit Error (mm)      3.545E-3
@1600

我不需要这些信息的大部分,现在,我只需要顶部的接触角和时间(底部以“@”为前缀)。目前,我有一个脚本,它提取我需要的信息,并创建另一个文本文件,以便于阅读。使用的代码如下:

^{pr2}$

我要找的是一种方式,使我的数据格式良好的电子表格,以便于分析。我希望在同一行,在相邻的单元格中的角度,以及在下面单元格中的测量时间,但我不确定最好的方法是什么。在

有更多Python经验的人能帮我吗?在

编辑:这里的图片显示了我试图解释(糟糕的)上面的内容。Sample of what I'm looking to achieve

EDIT2:@RonRosenfeld下面发布的解决方案是有效的,但是我还是希望有一个Python解决方案来解决这个问题,正如前面所说的那样。由于我以前没有使用excelvba的经验,我宁愿使用我熟悉的东西。在


Tags: 数据rightbasecmarealeftmm文本文件
1条回答
网友
1楼 · 发布于 2024-09-30 20:16:56

我只需要将原始文件读入Excel,只选择那些以接触角或@token开头的行。我不知道你需要做多少错误检查。下面假设您将选择多个文件,并且每个文件的格式与您在原始数据中演示的一样。它将在第1行输出角度,在第2行输出相应的时间。它不检查格式是否正确;或者每个角度都有相应的时间。在

如果您只选择一个文件,它也不会进行测试,并且会给出一个错误。如有必要,可以添加该功能。在

编辑:修改为将制表符空格作为分隔符;还添加了清除工作表和自动调整列的代码

如果要选择其他参数,也应该很容易修改。在

    Option Explicit
'Set Reference to Microsoft Scripting Runtime
Sub GetDataFromTextFiles()
    Dim FSO As FileSystemObject
    Dim TS As TextStream
    Dim F As File
    Dim sLines As Variant
    Dim I As Long, J As Long
    Dim sFilePath
    Dim S As String
    Dim vLines() As Variant
    Dim rExtract As Range
'Hard Coded here but could also use a
'User form to select multiple lines
vLines = Array("@", "Contact Angle")
Set rExtract = [b3]
Cells.Clear

[a3] = "Contact Angle (deg)"
[a4] = "Measured At"

sFilePath = Application.GetOpenFilename("Text Files (*.txt), *.txt", MultiSelect:=True)
Set FSO = New FileSystemObject

For J = LBound(sFilePath) To UBound(sFilePath)
    Set TS = FSO.OpenTextFile(sFilePath(J), ForReading)

    Do Until TS.AtEndOfStream = True
    S = Trim(Replace(TS.ReadLine, Chr(9), Chr(32)))
        For I = 0 To UBound(vLines)
            If InStr(1, S, vLines(I)) = 1 Then
                Select Case I
                    Case 0 '@
                        With rExtract(2, 1)
                            .Value = TimeSerial(Int(Mid(S, 2) / 100), Mid(S, 2) Mod 100, 0)
                            .NumberFormat = "hh:mm"
                        End With
                    Case 1  '@
                        rExtract(1, 1) = Mid(S, InStrRev(S, " ") + 1)
                        'advance to next column after outputting angle
                        Set rExtract = rExtract(1, 2)
                End Select
            End If
        Next I
    Loop
Next J

Cells.EntireColumn.AutoFit

End Sub

这是另一个不需要设置对Microsoft脚本运行时的引用的宏。它不使用FileSystemObject,而是使用内置的VBA例程来读取文件。有人告诉我它会运行得更快,但我自己还没有测试过。此外,某些类型的数据可能存在问题,但它们似乎不存在于您的文件中,并且在您的示例中运行良好。在

^{pr2}$

相关问题 更多 >