【问题标题】:Parse values in text file解析文本文件中的值
【发布时间】:2017-05-08 18:00:34
【问题描述】:

我有一个 .txt file,看起来像这样:

id        nm        lat        lon        countryCode
5555555  London    55.876456   99.546231   UK

我需要解析每个字段并将它们添加到 SQLite 数据库。到目前为止,我已经设法将 id、name 和 countryCode 列转移到我的数据库中,但我正在努力寻找一种解决方案来分别解析每条记录的 lat 和 lon。

我尝试了正则表达式,但没有运气。我还考虑过制作一个解析器来检查最后一个非空白字符是否是字母,以确定字符串是 lat 而不是 lon,但不知道如何正确实现它。我可以使用正则表达式解决它还是应该使用自定义解析器?如果有,怎么做?

【问题讨论】:

  • 我想我可能会这样做:stackoverflow.com/questions/8113782/…
  • 为什么不直接按空格分割数据行,因为它们的列顺序都相同?您真正需要做的就是逐行执行 id, nm, lat, lon, cc = line.split()
  • 您可以使用 pandas 在 1 行中做到这一点。 df = pandas.read_csv('file_path', sep='\t') 然后将整个数据框插入到您的 SQLite 数据库中。

标签: python regex parsing


【解决方案1】:

你可以像这样用 pandas 做到这一点:

import pandas as pd
import sqlite3

con = sqlite3.connect('path/new.db')
con.text_factory = str

df = pd.read_csv('file_path', sep='\t')
df.to_sql('table_01', con)

如果有坏行并且你可以跳过它们,那么使用这个:

df = pd.read_csv('file_path', sep='\t', error_bad_lines=False)

Read more.

【讨论】:

    【解决方案2】:

    查看文本文件,看起来每一行的格式总是相同的。因此,为什么不这样拆分:

    for line in lines:
        id, nm, lat, lon, code = line.split()
        # Insert into SQLite db
    

    使用split(),您不必担心字符串的每个标记之间有多少空格。

    【讨论】:

    • id, nm, lat, lon, code = s 更清晰,更 Pythonic。
    【解决方案3】:

    使用str.split

    txt = '5555555  London    55.876456   99.546231   UK'
    (id, nm, lat, lon, countryCode) = txt.split()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-29
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 2011-11-20
      • 1970-01-01
      相关资源
      最近更新 更多