Python 如何读取GCP存储桶中的文件内容?

Python 如何读取GCP存储桶中的文件内容?,python,arrays,string,google-cloud-functions,google-cloud-storage,Python,Arrays,String,Google Cloud Functions,Google Cloud Storage,我需要读取当前位于GCP存储桶中的文件的前20行。我试图通过带有HTTP触发器的Google函数读取文件内容。我可以访问该文件,但当我试图使用“returndata\u string”返回内容以便查看输出时,它不起作用。我不必返回该文件的全部内容,这就是为什么我只需要前20行。理想情况下,我需要一些命令来读取内容并获取文件的每一行并将其添加到数组中,然后我可以从数组中获取特定的行。如果我在我的开发PC上使用Google bucket中的相同文件执行此操作,并使用open()命令,它就可以正常工作

我需要读取当前位于GCP存储桶中的文件的前20行。我试图通过带有HTTP触发器的Google函数读取文件内容。我可以访问该文件,但当我试图使用“returndata\u string”返回内容以便查看输出时,它不起作用。我不必返回该文件的全部内容,这就是为什么我只需要前20行。理想情况下,我需要一些命令来读取内容并获取文件的每一行并将其添加到数组中,然后我可以从数组中获取特定的行。如果我在我的开发PC上使用Google bucket中的相同文件执行此操作,并使用open()命令,它就可以正常工作。我可以阅读每一行并获取我想要的内容,但我需要通过谷歌功能进行测试。请帮忙

这是我到目前为止的代码

 storage_client = storage.Client()
    #define bucket
    bucket = storage_client.get_bucket(bucket_name)
    
    #Blob: File name that will be saved.
    blob = bucket.get_blob('LAS.las')
    data_string = blob.download_as_string()
    print(data_string)
return data_string

如果需要20行,则可以使用
.split('\n')
将字符串拆分为多行,然后使用
[:20]
获得20行

似乎
下载
提供了
字节
,您必须使用
decode()
decode('utf-8')
将其转换为
unicode
,如果您有编码中的文本
cp1250

blob = bucket.get_blob('LAS.las')
data_string = blob.download_as_string()

# convert bytes to unicode
data_string = data_string.decode()  

# convert string to list of lines
lines = data_string.split('\n')  

# return first 20 lines
return lines[:20]  

如果需要20行,则可以使用
.split('\n')
将字符串拆分为多行,然后使用
[:20]
获得20行

似乎
下载
提供了
字节
,您必须使用
decode()
decode('utf-8')
将其转换为
unicode
,如果您有编码中的文本
cp1250

blob = bucket.get_blob('LAS.las')
data_string = blob.download_as_string()

# convert bytes to unicode
data_string = data_string.decode()  

# convert string to list of lines
lines = data_string.split('\n')  

# return first 20 lines
return lines[:20]  


什么意思是
不起作用
?如果您有文本文件,那么
数据\u string.split('\n')[:20]
,您有20行。如果您有一个小文件,那么一次读取所有文件(只需要向服务器发出一个请求)比逐行读取(可能需要向服务器发出多个请求)更快。谢谢,我尝试添加了这个,但随后出现了以下错误。我需要先转换它吗?数据分割=数据字符串。分割('\n')[:20]返回数据分割[0]第35行,在hello\u world data\u split=数据字符串中。分割('\n')[:20]类型错误:需要一个类似字节的对象,而不是'str',可能它提供字节数据,在分割
数据字符串.解码()之前,您必须
解码()。分割('\n')[:20]
。顺便说一句:如果在
返回数据\u split[0]
中使用
[0]
,则只会得到第一行。如果您需要20行,那么您需要
返回数据\u split
而不使用
[0]
什么意思
不起作用
?如果您有文本文件,那么
数据\u string.split('\n')[:20]
,您有20行。如果您有一个小文件,那么一次读取所有文件(只需要向服务器发出一个请求)比逐行读取(可能需要向服务器发出多个请求)更快。谢谢,我尝试添加了这个,但随后出现了以下错误。我需要先转换它吗?数据分割=数据字符串。分割('\n')[:20]返回数据分割[0]第35行,在hello\u world data\u split=数据字符串中。分割('\n')[:20]类型错误:需要一个类似字节的对象,而不是'str',可能它提供字节数据,在分割
数据字符串.解码()之前,您必须
解码()。分割('\n')[:20]
。顺便说一句:如果在
返回数据\u split[0]
中使用
[0]
,则只会得到第一行。如果您需要20行,那么您需要
返回数据\u split
而不使用
[0]
谢谢,不幸的是,它不起作用。我刚刚尝试了一下,得到了这个错误:data\u string=data\u string.decode()UnicodeDecodeError:“utf-8”编解码器无法解码2291位置的字节0xb0:无效的起始字节这是否意味着我使用了错误的参数对其进行解码?请在Google中查看哪些字符可能具有代码
0xb0
,以及编码方式-可能是
cp1250
iso-8858
(在Windows上都很流行)但是endoding只适用于原始文本文件,我第一次看到扩展名
.las
,我不知道是否可以是文本文件。python文档中有更多编解码器,但如果
.las
不是原始文本文件,而是压缩的或具有特殊结构,那么编码就没有意义。谢谢,我会检查它。我确实注意到,当它在bucket中时,“Type”列下会显示“application/octetstream”。这有助于了解如何使用它吗?它可以表示它不是文本文件,或者它是带有压缩文本的文件,或者以特殊方式保留文本,并且您需要特殊的函数从文件中提取文本。例如,像
.txt
这样的文件,你不需要任何特殊的方法就可以阅读,但是
.doc
.xls
.pdf
(也可以保存文本)没有特殊的方法你就无法阅读。谢谢,不幸的是,它不起作用。我刚刚尝试了一下,得到了这个错误:data\u string=data\u string.decode()UnicodeDecodeError:“utf-8”编解码器无法解码2291位置的字节0xb0:无效的起始字节这是否意味着我使用了错误的参数对其进行解码?请在Google中查看哪些字符可能具有代码
0xb0
,以及编码方式-可能是
cp1250
iso-8858
(在Windows上都很流行)但是endoding只适用于原始文本文件,我第一次看到扩展名
.las
,我不知道是否可以是文本文件。python文档中有更多编解码器,但如果
.las
不是原始文本文件,而是压缩的或具有特殊结构,那么编码就没有意义。谢谢,我会检查它。我确实注意到,当它在bucket中时,“Type”列下会显示“application/octetstream”。这有助于了解如何使用它吗?它可以表示它不是文本文件,或者它是压缩文本文件,或者以特殊方式保留文本,并且您需要特殊的