我想知道從表格文本中洗掉行(同時保留標題)的最佳方法是什么,以便只有包含單詞的特定條目采用表格格式。
例如,我有一個包含動物及其名稱和年齡的表格文本檔案。(標題是動物/名稱/年齡。)如何洗掉“動物”標題中沒有“狗”的所有行?
動物名稱年齡
狗皮平 10
狗快樂 14
狗佛羅多 12
貓索倫 11
鳥甘道夫 10
鳥魔多 12
我只想要: 動物名字年齡
狗皮平 10
狗快樂 14
狗佛羅多 12
我在下面有我的示例代碼和注釋:
import os
headers = 1
field1 = 'ANIMALS'
sep = ' '
def getIndex(delimString, delimiter, name):
'''Get position of item in a delimited string'''
delimString = delimString.strip()
lineList = delimString.split(delimiter)
index = lineList.index(name)
return index
infile = 'C:/example'
outfile = 'C:/folder/animals'
try:
with open(infile, 'r') as fin:
with open(outfile, 'w') as fout:
for i in range(headers):
line = fin.readline()
fout.write(line)
line = fin.readline()
fout.write(line)
# This is where I get confused, I try using the method below:
for line in fin:
lineList = line.split(sep)
# But the code doesn't work as it only prints the header
# I have a feeling it's the way I'm phrasing this area
if field1 == 'DOG':
fout.write(line)
print '{0} created.'.format(outfile)
except IOError:
print "{0} doesn't exist- send help".format(infile)
在表格 .txt 檔案上有選擇地列印專案的最佳方法是什么?
uj5u.com熱心網友回復:
使用 stdin 和 stdout 而不是檔案來簡化它(如果你愿意,你可以用 open 替換它):
import sys
headers = 1
sep = ' '
fin = sys.stdin
fout = sys.stdout
for i in range(headers):
line = fin.readline()
fout.write(line)
for line in fin:
lineList = line.split(sep)
if lineList[0] == 'Dog':
fout.write(line)
當你運行它時:
python filter.py < input.txt
Animals Names Ages
Dog Pippin 10
Dog Merry 14
Dog Frodo 12
換句話說,就是不要列印你不想要的東西。
uj5u.com熱心網友回復:
讓我們假設它是一個 csv 檔案,使用此代碼,您只能回傳包含 Dog 作為 Animals 值的行
import pandas as pd
df = pd.read_csv(file_name)
df.loc[df.Animals == 'Dog']
如果要更新可以運行的檔案df.to_csv(filename),它將替換具有相同檔案名的 csv 檔案,否則它將創建另一個具有檔案名的 csv 檔案。
我希望這對你有幫助。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/350345.html
上一篇:Python在多個子目錄中搜索特定字串的檔案并回傳檔案路徑(如果存在)
下一篇:無法在所有平臺上讀取Flutter中的檔案,該檔案在linux桌面上可以看到但web(chrome)看不到它,android也看不到
