使用 python 循环遍历文本文件中的行
Looping through lines in a text file with python
我收到结构如下的文本文件:
random
----new data-----
06/19/2018 13:57:39.99 random information here
06/19/2018 13:58:24.99 some more random info
06/19/2018 13:58:35.08 00:00:04.38 A 00000 0 765 228270257 A0 44 45
06/19/2018 13:58:39.99 00:00:00.00 A 00000 0 756 228270257 A0 4 5
06/19/2018 13:58:40.61 00:00:00.00 A 00000 0 828 228270257 A0 1 7
06/19/2018 13:57:39.99 random information here
06/19/2018 13:58:24.99 some more random info
---end data---
random stuff
有几行随机信息围绕着我关心的实际数据。我只想保留第四行有A
的行,然后我想把数据转成CSV文件。
假设上面的数据在 play.txt
中,我已经尝试了几种变体。这不起作用:
import csv
import pandas as pd
from io import StringIO
id = []
with open('play.txt', 'r') as fi:
for ln in fi:
if ln.startswith("A",4):
id.append(ln[0:])
id2 = ' '.join(id)
df = pd.read_table(StringIO(id2), delimiter=r'\s+', header=None)
print(df)
df.to_csv('out.csv')
如何在 python 中完成?
使用以下内容:
with open('play.txt', 'r') as fi:
for line in fi:
line = line.split(" ")
# you can also use line.split() to split
# the line by all whitespace.
if (len(line)>=4 and line[3]=="A"):
...
这里用空格分割,然后就可以使用列表索引了。
为什么 ln.startswith("A",4)
不起作用
该代码无效有两个主要原因。
- Python 从 0 索引开始,所以如果您要查找第 4 列,您可以写
ln.startswith("A", 3)
ln.startswith("A", 3)
获取字符串中的第 4 个字符。 Python 以字符串形式读取行,其中包含您拥有的文本。因此,使用 ln.startswith("A", 3)
得到第 4 个字符,在所有行中,它是字符“1”。
# read the file
file = open('play.txt').read()
id = []
# loop through the file and if the fourth word is 'A' then append that line to 'id'
for line in file.splitlines():
if line.split()[3] == 'A':
id.append(line.split())
# save to a dataframe
df = pd.DataFrame(id)
df
0 1 2 3 4 5 6 7 8 9 10
0 06/19/2018 13:58:35.08 00:00:04.38 A 00000 0 765 228270257 A0 44 45
1 06/19/2018 13:58:39.99 00:00:00.00 A 00000 0 756 228270257 A0 4 5
2 06/19/2018 13:58:40.61 00:00:00.00 A 00000 0 828 228270257 A0 1 7
# if you want specify column names too
# df = pd.DataFrame(id, columns=['col_name_1', 'col_name_2'... ])
# save to csv
df.to_csv('out.csv')
我收到结构如下的文本文件:
random
----new data-----
06/19/2018 13:57:39.99 random information here
06/19/2018 13:58:24.99 some more random info
06/19/2018 13:58:35.08 00:00:04.38 A 00000 0 765 228270257 A0 44 45
06/19/2018 13:58:39.99 00:00:00.00 A 00000 0 756 228270257 A0 4 5
06/19/2018 13:58:40.61 00:00:00.00 A 00000 0 828 228270257 A0 1 7
06/19/2018 13:57:39.99 random information here
06/19/2018 13:58:24.99 some more random info
---end data---
random stuff
有几行随机信息围绕着我关心的实际数据。我只想保留第四行有A
的行,然后我想把数据转成CSV文件。
假设上面的数据在 play.txt
中,我已经尝试了几种变体。这不起作用:
import csv
import pandas as pd
from io import StringIO
id = []
with open('play.txt', 'r') as fi:
for ln in fi:
if ln.startswith("A",4):
id.append(ln[0:])
id2 = ' '.join(id)
df = pd.read_table(StringIO(id2), delimiter=r'\s+', header=None)
print(df)
df.to_csv('out.csv')
如何在 python 中完成?
使用以下内容:
with open('play.txt', 'r') as fi:
for line in fi:
line = line.split(" ")
# you can also use line.split() to split
# the line by all whitespace.
if (len(line)>=4 and line[3]=="A"):
...
这里用空格分割,然后就可以使用列表索引了。
为什么 ln.startswith("A",4)
不起作用
该代码无效有两个主要原因。
- Python 从 0 索引开始,所以如果您要查找第 4 列,您可以写
ln.startswith("A", 3)
ln.startswith("A", 3)
获取字符串中的第 4 个字符。 Python 以字符串形式读取行,其中包含您拥有的文本。因此,使用ln.startswith("A", 3)
得到第 4 个字符,在所有行中,它是字符“1”。
# read the file
file = open('play.txt').read()
id = []
# loop through the file and if the fourth word is 'A' then append that line to 'id'
for line in file.splitlines():
if line.split()[3] == 'A':
id.append(line.split())
# save to a dataframe
df = pd.DataFrame(id)
df
0 1 2 3 4 5 6 7 8 9 10
0 06/19/2018 13:58:35.08 00:00:04.38 A 00000 0 765 228270257 A0 44 45
1 06/19/2018 13:58:39.99 00:00:00.00 A 00000 0 756 228270257 A0 4 5
2 06/19/2018 13:58:40.61 00:00:00.00 A 00000 0 828 228270257 A0 1 7
# if you want specify column names too
# df = pd.DataFrame(id, columns=['col_name_1', 'col_name_2'... ])
# save to csv
df.to_csv('out.csv')